什么是java.lang.UnsupportedClassVersionError?

时间:2011-12-22 14:04:12

标签: java compiler-errors

什么是java.lang.UnsupportedClassVersionError

我从doc读取:当Java虚拟机尝试读取类文件并确定文件中的主要版本号和次要版本号不受支持时, #39;了解这是什么意思。

文件中的主要版本和次要版本是什么?

当抛出以下异常时,我在其他机器上启动了一个应用程序:

Exception in thread "main" java.lang.UnsupportedClassVersionError: client (Unsupported major.minor version 51.0)
   at java.lang.ClassLoader.defineClass0(Native Method)
   at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
   at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
   at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
   at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
   at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
   at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)

虽然它在我的机器上运行良好。

2 个答案:

答案 0 :(得分:10)

不同版本的JDK编译器生成不同的类版本。例如,Java 1.4生成48.0,1.5生成49.0和1.6 50.0。

JVM通常能够从JVM中加载比自身“更小”但从不更大的类。您可能正在尝试在1.5 JVM等上使用为1.6编译的类。

如果您有兴趣,找到类版本的好工具是bcel。特别是,它有一套很好的蚂蚁任务。

答案 1 :(得分:3)

这意味着您的编译器版本比您尝试运行类的jvm版本更新。要么降级机器的java编译器,要么升级其他机器的运行时jvm。