2014-11-05 45 views
0

遷移到Java 8之後,我的工具拋出follwing異常,如果有人試圖在早期的Java環境中運行它。解決方法因爲java.lang.UnsupportedClassVersionError不顯示它

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/myapp/MyTool: Unsupported major.minor version 52.0 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482) 

是否有某種方法不顯示此錯誤,並顯示良好的錯誤消息與提議升級Java。

當我明白我應該創建一些小的類,如:

public class CheckerJavaVersion { 
    public static void main(String args[]) { 
     String sVersion = System.getProperty("java.version"); 
     sVersion = sVersion.substring(0, 3); 
     Float f = Float.valueOf(sVersion); 
     if (f.floatValue() < (float) 1.8) { 
      System.out.println("Please upgrate your Java to 1.8 version"); 
      System.exit(1); 
     } 
    } 

} 

,並通過早期的編譯器編譯它。我需要一些解決方案,在MyToll類的主要方法啓動之前,首先運行這個類。

PS。應用包裝在罐子裏。

回答

2

問題在於當類加載時發生錯誤,因此您必須使用「啓動器應用程序」,該啓動器應用程序在單獨的進程中啓動實際應用程序,或在Java版本之後動態加載應用程序檢查。

我沒有測試,但什麼可能工作是這樣的:

public static void main(String args[]) { 
    if(javaVersionOk) { 
    Class.forName("actual.mainclass.name").getMethod("actual.main.method.name").invoke(); 
    } 
} 

的想法是通過它的名稱來訪問類,從而使運行時加載並初始化它在那個時候。我不知道,但是,如果你能在所有的情況下延緩類加載一樣,所以你必須從那裏下去。

而且順便說一句,IIRC目前已經有應用程序/提供這種功能庫,我只是不的rember他們的名字。因此,搜索可能值得您一段時間。

編輯:你可能想看看appstart如果不是使用它然後獲得靈感。

另一個發射器將Apache Commons Launcher

替代方案:

或者你可以只爲要支持,請致電java -version和啓動應用程序前檢查返回版本的每個平臺的啓動腳本。

另一種方法是在本地使用JNLP/Webstart的,它允許你指定一個最低版本和AFAIK甚至提供下載/升級功能。

相關問題