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