2012-09-04 54 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

不客气。 :) –