我發送了一個可運行jar給朋友。他雙擊它,它不會打開它崩潰。但是,我的其他朋友可以打開它。可運行jar和java的多個版本
我相信問題是我的第一個朋友在他們的機器上有多個版本的java,並且它在雙擊時使用了錯誤的版本。
我怎樣才能使用正確版本的java來運行我的jar?我可以讓我的朋友從命令行執行此操作。
我發送了一個可運行jar給朋友。他雙擊它,它不會打開它崩潰。但是,我的其他朋友可以打開它。可運行jar和java的多個版本
我相信問題是我的第一個朋友在他們的機器上有多個版本的java,並且它在雙擊時使用了錯誤的版本。
我怎樣才能使用正確版本的java來運行我的jar?我可以讓我的朋友從命令行執行此操作。
他可以簡單地在命令行中獲取正確版本的java作爲其執行語句的一部分。如果,例如,您正在使用的Java6編譯,他可以不喜歡在窗戶下面:
C:\Program Files\Java\jre1.6.0_13\bin\java -jar <myJarFileName>
他會簡單地運行這個命令哪裏的jar文件的位置。當然,這是假設他已經安裝了JRE 1.6.0_13 - 對於他正在運行的任何版本進行更改。此外,不同系統的路徑也會有所不同。
Windows中的另一個選擇是,如果我沒有記錯,您可以通過控制面板中的java配置將不同版本的Java指定爲默認值。
編輯:
另外,你可以在命令中java
可執行文件更改爲javaw
,如果你希望它在後臺運行 - 也就是說,如果它是一個Swing應用程序主要是和控制檯不需要。
我通過在-target 1.3
的項目中構建1個文件來處理它。這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);
}
});
}
}
}
關於「它崩潰」更具體。你有例外嗎?哪一個?如果你的朋友在命令行中通過「java -jar file.jar」打開文件,會發生什麼情況?請更具體地說。 – Progman 2010-05-07 15:04:50