可运行Jar和java的多个版本

可运行Jar和java的多个版本,java,Java,我给一个朋友寄了一个可以用的罐子。他双击它,它没有打开,它崩溃了。但是我的另一个朋友可以打开它 我相信问题在于我的第一个朋友在他们的机器上有多个java版本,而且双击时使用了错误的版本 如何使用正确版本的java来运行我的jar?我可以让我的朋友从命令行执行此操作。他只需在命令行上获取正确版本的java作为其执行语句的一部分。例如,如果您使用Java6进行编译,他可以在windows中执行以下操作: C:\Program Files\Java\jre1.6.0_13\bin\java -jar

我给一个朋友寄了一个可以用的罐子。他双击它,它没有打开,它崩溃了。但是我的另一个朋友可以打开它

我相信问题在于我的第一个朋友在他们的机器上有多个java版本,而且双击时使用了错误的版本


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

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

C:\Program Files\Java\jre1.6.0_13\bin\java -jar <myJarFileName>
C:\ProgramFiles\Java\jre1.6.0\u 13\bin\Java-jar
他只需在jar文件所在的任何位置运行该命令。当然,这是假设他已经安装了JRE 1.6.0_13——对于他正在运行的任何版本,都要进行更改。此外,对于不同的系统,路径也会有所不同

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


编辑:


此外,如果希望在后台运行,也就是说,如果它主要是一个Swing应用程序,并且不需要控制台,则可以将命令中的
java
可执行文件更改为
javaw

我通过在项目中使用
-target 1.3
构建一个文件来处理它。该文件检查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);
                    }
                });
            }
        }
    }
import javax.swing.JLabel;
导入javax.swing.JOptionPane;
导入javax.swing.SwingUtilities;
公共类JVMCheck{
私有JVMCheck(){}
公共静态布尔值isJVMOk()
{
布尔结果=假;
字符串s=System.getProperty(“java.version”、“undf”);
如果(!s.equals(“undef”)){
字符串部分[]=s.split([^0-9]+”);
如果(零件长度>=2){
如果(部分[0]。等于(“1”)&部分[1]。比较(“6”)>=0){
结果=真;
}
}
}
返回结果;
}
公共静态void main(字符串[]args)
{
if(JVMCheck.isJVMOk())
{
//在这里称你为真正的主课:
//RealMainClass.main(args);
}
其他的
{
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐
{
JOptionPane.showMessageDialog(null,
新建JLabel(“错误:不支持的JVM:\”“
+System.getProperty(“java.vm.name”,“unde”)+“\”
+System.getProperty(“java.vm.version”、“unde”)
+“
运行所需的JVM版本为1.6.0
” +“1.6 JRE可从以下位置下载:
” + "http://java.sun.com/javase"), “错误”,作业窗格。错误消息); 系统出口(0); } }); } } }
更具体地说明“it崩溃”。你有例外吗?哪一个?如果您的朋友通过命令行中的“java-jar file.jar”打开文件,会发生什么?请说得具体一点。