java.lang.UnsupportedClassVersionError: Bad version number in .class file异常的
使用MyEclipse6.5,在组织好测试用例之后,发现JavaCompiler->Compilercompliancelevel是5.0。之前一直在使用5.0的级别进行编译运行。当我切换Compilercompliancelevel到6.0以后,重新编译工程,运行测试用例,抛出异常:
java.lang.UnsupportedClassVersionError:Badversionnumberin.classfile
atjava.lang.ClassLoader.defineClass1(NativeMethod)
atjava.lang.ClassLoader.defineClass(UnknownSource)
atjava.security.SecureClassLoader.defineClass(UnknownSource)
atjava.net.URLClassLoader.defineClass(UnknownSource)
atjava.net.URLClassLoader.access$100(UnknownSource)
atjava.net.URLClassLoader$1.run(UnknownSource)
atjava.security.AccessController.doPrivileged(NativeMethod)
atjava.net.URLClassLoader.findClass(UnknownSource)
atjava.lang.ClassLoader.loadClass(UnknownSource)
atsun.misc.Launcher$AppClassLoader.loadClass(UnknownSource)
atjava.lang.ClassLoader.loadClass(UnknownSource)
atorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:683)
atorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:425)
atorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:445)
atorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
atorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
atorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
从第一行“java.lang.UnsupportedClassVersionError:Badversionnumberin.classfile”,它说在类文件中发现了错误的版本号,我以为是因为启动了Project->BuildAutomatically自动编译,每次编译没有修改类路径下类文件的版本号,于是禁用了BuildAutomatically,删除WebRoot\WEB-INF\classes下类文件,手动指定Compilercompliancelevel为6.0,重新编译,生成了类文件,再重新执行程序的时候,依然是上面的异常。
仔细琢磨了一下,原来MyEclipse6.5的JRE是5.0的,虽然我设置了Compilercompliancelevel为6.0,其实依然是再5.0的JRE下进行编译的。
打开InstalledJREs,重新Add一个JRE,指定一个JRE路径,使用自己安装的JDK6.0,也就是JRE6的环境进行编译,这时再运行测试用例,就能正常编译执行了。
========================================================================================
有时候,在MyEclipse运行application程序时会呈现如下过错:
java.lang.UnsupportedClassVersionError:Badversionnumberin.classfile
造成这种过错的原由是ni的支撑Tomcat运行的JDK版本与支撑application运行的JDK版本不一致导致的.
那么如何解决上面的问题呢?
措施显而易见:把它们的JDK版本改成一致.
步骤如下:
1.Window-->Preferences-->Java-->compiler中的compilercompliancelevel对应的下拉菜单中选择JDK版本.
2.Window-->Preferences-->MyEclipse-->Servers-->Tomcat-->Tomcatn.x-->JDK中的TomcatJDKname下的下拉菜单中选择自身电脑上安装的JDK版本(必需与步骤1中的JDK版本一致).
如果还是没有解决,不用焦急,因为有些MyEclipse版本自带有JDK版本,所以也要将它改过来.
3.Window-->Preferences-->Java-->InstalledJRES,然后在右边选择与步骤1和2版本一致的JDK版本,如果没有,可以自身添加.然后选中就可以了.
转自:http://student.csdn.net/space.php?uid=252488&do=blog&id=29183