2012-09-04 85 views
1

我想測試java.So的平臺獨立性,我寫在Java中的Hello World程序,並使用編譯器爲Windows創建的HelloWorld.class文件編譯它。然後我試圖運行該文件在Linux(Ubuntu的)。我在錯誤結束了。(JRE的已安裝在Linux)瞭解Java平臺的獨立性

Exception in thread "main" java.lang.UnsupportedClassVersionError: HelloWorld : Unsupported major.minor version 51.0 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:634) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) 
at java.net.URLClassLoader.access$000(URLClassLoader.java:73) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:212) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 

Could not find the main class: HelloWorld. Program will exit. 

然後我使用了Linux編譯器編譯相同的程序和使用的。 class文件來檢查它是否在windows中運行。它完美地工作。

就我所知在兩個場合的程序應該完美地工作,因爲字節碼文件(的.class)爲平臺,當我試圖在Linux中運行該程序independent.What出了什麼問題?

+4

你甚至還能搜索該錯誤的網頁?你試圖在錯誤版本的Java上運行它。 –

+1

Check here:http://stackoverflow.com/questions/2466828/java-lang-unsupportedclassversionerror-bad-version-number-in-class-file – Icarus

回答

5
HelloWorld : Unsupported major.minor version 51.0 

說你的編譯器版本不同於運行時Java版本。

Java平臺的獨立性的理解

你需要有JVM是兼容的運行時該機還對類文件的編譯器版本(與(或)更高)。

+1

更具體地說,他嘗試在Java6 VM上使用Java7編譯代碼。 –

+1

@ThomasJungblut:感謝您添加信息。 – kosa

+1

當然你都是對的。非常感謝。現在我失去了懷疑。:) – Assasins

2

你得到的錯誤,因爲你使用不同版本的Java和Linux中運行

它在不同版本的Java編譯的類

最大的可能是您的Java在Linux是一箇舊版本相比,一個用於編譯。

要試驗平臺無關性,運行的.class文件在Linux編譯在Windows

1

您已經安裝在你的Ubuntu箱的JRE版本比編譯的JDK版本早你的文件。特別51.0對應的Java 7,我相信,所以你可能有6版本在Ubuntu上安裝。

你說得對,字節碼格式在所有相同。然而,這並不是整個未來真正版本,當然,;隨着新功能的推出,以前的JVM版本無法理解它們。 v6 JVM不支持Java 7中使用的字節碼格式。

(順便說一句,如果你進行這個測試的其他方式 - 編譯版本6字節的Linux和運行在你的Java 7的Windows虛擬機中的類,它會成功運行。)

+2

是的,當然,我在問題中提到,當我嘗試另一種方式時,它起作用。無論如何,我現在正在更新我的JRE for linux。希望它能解決這個問題。謝謝很多:) – Assasins

+0

我已更新,並且完美地工作。 – Assasins

1

得到它的工作交叉-versions全部歸結爲使用編譯器的cross-compilation options。如果正確完成,代碼可以在Java 7 SDK上編譯並適合在1.1 JRE上運行(假設您可以找到一個)。

+1

有用的信息。謝謝 – Assasins

+0

不客氣。 :) –