Runnable Jar和多个版本的java

时间:2010-05-07 14:59:14

标签: java

我把一个可运行的罐子送给了朋友。他双击它并且它不会打开它崩溃。但是我的另一个朋友可以打开它。

我认为问题是我的第一个朋友在他们的机器上有多个版本的java,并且在双击时使用了错误的版本。

如何使用正确版本的java来运行我的jar?我可以让我的朋友从命令行执行此操作。

2 个答案:

答案 0 :(得分:3)

我通过使用-target 1.3在我的项目中构建1个文件来处理它。该1个文件检查JVM版本并在用户需要更新其JRE时显示消息。清单中的Main-class指向此类。这为用户提供了比崩溃更好的东西。

    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 :(得分:1)

他可以简单地在命令行中获取正确版本的java作为其执行语句的一部分。例如,如果您正在使用Java6进行编译,那么他可以在Windows中执行以下操作:

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

他只需在jar文件所在的位置运行此命令。当然,这是假设他安装了JRE 1.6.0_13 - 无论他正在运行什么版本,都要更改它。此外,不同系统的路径也不同。

Windows中的另一个选项是,如果我没记错的话,您可以通过控制面板中的java配置指定不同版本的Java作为默认版本。


修改

此外,如果您希望它在后台运行,您可以将命令中的java可执行文件更改为javaw - 即,如果它主要是Swing应用程序,则不需要控制台。