出现 java.lang.UnsupportedClassVersionError 错误的原因,是因为我们使用高版本的 JDK 编译的 Java class 文件试图在较低版本的 JVM 上运行,所报的错误。 因 为,高版本的 JDK 生成的 class 文件使用的格式,可能与低版本的 JDK 的 .class 文件格式不同。这样,低版本的 JVM 无法解释执行这个 .class 文件,会抛出 java.lang.UnsupportedClassVersionError 不支持的 Class 版本错误。 这个错误尤其在 JDK5 与 JDK5 之前的版本上表现明显。因为, JDK5 在 Java 语法上作了不少增强,引入了一些新的 .class 文件的元素,导致旧版本的 JVM 无法解释、执行 .class 文件。即使这个类并没有使用任何 JDK5 的新元素,但是 JDK5 生成的 .class 文件, JDK1.4 及其以前的 JVM 都无法辨认! 所以,目前使用最广的,还是 JDK1.4 。很多软件和项目都无法使用 JDK5 。 有 一个名叫 Toby Reyelts 的开发人员决定消除 JDK 5.0 编译器限制。结果就是开放源代码的 Retroweaver 项目(参见 参考资料 )。 Retroweaver 使用 classworking 技术来修改由 JDK 5.0 编译器生成的二进制类表示,以便这些类可以与早期的 JVM 一起使用。 它通过修改 JDK5 生成的 .class 文件,将其变为 JVM1.4 及之前版本能够运行的 .class 文件。 目前,使用新版本的 IDE 编辑器可能会造成你遭遇 java.lang.UnsupportedClassVersionError 错误。 比如, Eclipse3.2+MyEclipse5.0 这个新版的 IDE 工具。进入首选项 ---Java--- 编译器,可以看到,默认的编译器依从等级是 5.0, 这里改为 1.4 ,因为我们使用的软件需要运行在 JDK1.4 的 JVM 上。 同一配置区下的已安装 JRE 中,不要安装 JRE ,而是安装 JDK ,指定 1.4 或 1.5 的 JDK 。还是使用 jdk1.4 。 在 MyEclipse---- 应用服务器下,指定 Tomcat5 。指定 Tomcat 使用 jdk1.4 。 这 样,就全部指定使用 Jdk1.4 来编译和运行程序了。如果全部指定 jdk5 也是可以的。但是,绝对不能够使用 jdk5 编译程序,而又在 jdk1.4 上运行程序,那样将会抛出 java.lang.UnsupportedClassVersionError 不支持的 Class 版本错误。 这种情况下,不论是 Eclipse 生成的 war 包,还是 ant 文件生成 war 包,都使用 jdk5 编译,就会在运行时出现错误,该应用程序将无法启动。如果你查看 Tomcat 的日志文件,将会看到正是 java.lang.UnsupportedClassVersionError 错误发生了!
另种解决方法:
我在本地编译和调试好的程序一点问题也没有,但是,当我上传到远程服务器的 Tomcat 上一测试就抛异常,我一直也不知道是什么原因。上网搜了一下,知道了症结所在。
问题所在:
因为,我们在本地使用的编译器和服务器上使用的编译器版本不同所致。
我在本地上编译使用的 JDk 版本是 jdk5.0, 而远程服务器上的 jdk 的版本是 jdk1.4, 所以我编译的程序在远程就出错。
解决的办法其实很简单,只要更改这个选项就行了。具体步骤如下: ---------------------------------------------------------- 1、右键点击工程文件,选择属性(properties), 2、在属性窗口中选择 Build-->Java,在右边的选项中有四个下拉框,就可以看到编译选项了, 3、其中Compiler和Debug Option可以不用管,只在Languege features和Target VM中选择相应的JDK版本就可以了,然后确定,一切OK。 附件中是配置的图片。 ----------------------------------------------------------- 如果在Target VM中选择了All Java SDKs,那么你的class文件在使用JDK1.1的VM上都可以运行(Jbuilder2006帮助中是这么说的,估计没几个人的机子上还在用JDK1.1吧 :-)