Runnable Jar и несколько версий Java - PullRequest
2 голосов
/ 07 мая 2010

Я отправил подержанную банку другу. Он дважды щелкает по нему, и он не открывается, он падает. Однако мой другой друг может открыть его.

Мне кажется, проблема в том, что у моего первого друга на компьютере установлено несколько версий java, и он использует неверную версию при двойном щелчке.

Как мне использовать правильную версию java для запуска jar? Я в порядке, чтобы мой друг делал это из командной строки.

Ответы [ 2 ]

3 голосов
/ 07 мая 2010

Я справляюсь с этим, создавая 1 файл в моем проекте с -target 1.3. Этот 1 файл проверяет версию JVM и отображает сообщение, если пользователю необходимо обновить свою JRE. Главный класс в манифесте указывает на этот класс. Это дает пользователю что-то более приятное, чем сбой.

    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.SwingUtilities;
    public class JVMCheck {
        private JVMCheck() {}
        public static boolean isJVMOk()
        {
            boolean result = false;
            String s = System.getProperty("java.version", "undef");
            if (!s.equals("undef")) {
                String parts[] = s.split("[^0-9]+");
                if (parts.length >= 2) {
                    if (parts[0].equals("1") && parts[1].compareTo("6") >= 0) {
                        result = true;
                    }
                }
            }
            return result;
        }
        public static void main(String[] args)
        {
            if (JVMCheck.isJVMOk())
            {
                // Call you real main class here:
                // RealMainClass.main(args);
            }
            else
            {
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run()
                    {
                        JOptionPane.showMessageDialog(null, 
                            new JLabel("<html><b>Error<b>: Unsupported JVM: \""
                                + System.getProperty("java.vm.name", "Undef") + "\" "
                                + System.getProperty("java.vm.version", "Undef")
                                + "<br>The JVM version required to run is 1.6.0<br>"
                                + "The 1.6 JRE may be downloaded from:<br>"
                                + "http://java.sun.com/javase"),
                                "Error", JOptionPane.ERROR_MESSAGE);
                        System.exit(0);
                    }
                });
            }
        }
    }
1 голос
/ 07 мая 2010

Он мог просто получить правильную версию Java как часть своего оператора выполнения в командной строке. Если, например, вы компилируете с Java6, он может сделать что-то вроде следующего в Windows:

C:\Program Files\Java\jre1.6.0_13\bin\java -jar <myJarFileName>

Он просто запускает эту команду везде, где находится файл jar. Это предполагает, конечно, что у него установлен JRE 1.6.0_13 - замените это для любой версии, которую он использует. Также путь будет разным для разных систем.

Другая опция в Windows - это то, что вы можете указать разные версии Java по умолчанию через конфигурацию java на панели управления, если я правильно помню.


Edit:

Кроме того, вы можете изменить исполняемый файл java в команде на javaw, если хотите, чтобы он выполнялся в фоновом режиме, т.е. если это в первую очередь приложение Swing и консоль не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...