系统中安装了两个版本的jdk(5.0和6.0)。
由于之前用xscoket高版本时,最低版本必须为jdk6.0,于是在eclipse中统一设置了使用jdk6.0进行编译。但之前的一些遗留系统仍然保留的是jdk5.0环境。
今天,测试一段代码。抛出此错误。
java.lang.UnsupportedClassVersionError: Bad version number in .class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
Exception in thread "main"
从异常栈信息来说,Bad Version number in .class file 已经是非常明确的指示!
是因为我们使用高版本的JDK编译的Java class文件试图在较低版本的JVM上运行,所报的错误。因为,高版本的JDK生成的class文件使用的格式,可能与低版本的JDK的.class文件
格式不同。这样,低版本的JVM无法解释执行这个.class文件,会抛出java.lang.UnsupportedClassVersionError不支持的Class版本错误。这个错误尤其在JDK5与JDK5之前的版本
上表现明显。因为,JDK5在Java语法上作了不少增强,引入了一些新的.class文件的元素,导致旧版本的JVM无法解释、执行.class文件。
这时候只需要把项目用的JDK与你安装的JDK搞成版本一样就解决了。使用的ide为Eclipse。
步骤:右击你的项目-->属性-->Java Compiler,设置合适的版本!!