2010-05-07 30 views
2

我發送了一個可運行jar給朋友。他雙擊它,它不會打開它崩潰。但是,我的其他朋友可以打開它。可運行jar和java的多個版本

我相信問題是我的第一個朋友在他們的機器上有多個版本的java,並且它在雙擊時使用了錯誤的版本。

我怎樣才能使用正確版本的java來運行我的jar?我可以讓我的朋友從命令行執行此操作。

+2

關於「它崩潰」更具體。你有例外嗎?哪一個?如果你的朋友在命令行中通過「java -jar file.jar」打開文件,會發生什麼情況?請更具體地說。 – Progman 2010-05-07 15:04:50

回答

1

他可以簡單地在命令行中獲取正確版本的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應用程序主要是和控制檯不需要。

3

我通過在-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); 
        } 
       }); 
      } 
     } 
    }