我把一个可运行的罐子送给了朋友。他双击它并且它不会打开它崩溃。但是我的另一个朋友可以打开它。
我认为问题是我的第一个朋友在他们的机器上有多个版本的java,并且在双击时使用了错误的版本。
如何使用正确版本的java来运行我的jar?我可以让我的朋友从命令行执行此操作。
答案 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应用程序,则不需要控制台。