Java异常.UnsupportedClassVersionError

题记

    尤其是升级版本,包括包和jdk等,都要关注一下版本信息。

    jdk8(1.8)之后的几年,估计这个世界又要有无数的程序员的时间浪费在版本一致性问题上了。

    仅就这个问题,java界的包都应该标识一下,并且需要一个程序来扫描此类问题,以在事前就能发现问题,而不是runtime的时候去用肉眼扫描无数行的stack信息,再去猜测无数种可能中最傻的一种出错结果。

    btw,这是不是说,过程管理越来越重要了呢。

========================================================================

1.错误原因

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都无法辨认!

 

2.解决方法

(1)直接换JDK

比如,Eclipse或MyEclipse IDE工具,进入首选项---Java---编译器,可看到默认的编译器的等级,这里改为JVM对应的版本即可。

(2)Retroweaver 处理

开放源代码的 Retroweaver 项目, 使用 classworking 技术来修改由 JDK 5.0 编译器生成的二进制类表示,以便这些类可以与早期的 JVM 一起使用。通过修改JDK5生成的.class文件,将其变为JVM1.4及之前版本能够运行的.class文件。目前,使用新版本的IDE编辑器可能会造成你遭遇java.lang.UnsupportedClassVersionError 错误。

扫描二维码关注公众号,回复: 836732 查看本文章

(3)MyEclipse中Tomcat此类问题

 

在MyEclipse----应用服务器下,指定Tomcat使用的JDK版本,这样就全部指定使用设定的JDK来编译和运行程序了。注意,绝对不能够使用低版本编译程序,而又在低版本上运行程序,那将会抛出java.lang.UnsupportedClassVersionError不支持的Class版本错误。不论是Eclipse生成的war包,还是ant文件生成war包,都使用低版本编译器编译,就会在运行时出现错误,该应用程序将无法启动。查看Tomcat的日志文件,会看到java.lang.UnsupportedClassVersionError错误。

 

===============================================================

http://www.thinksaas.cn/group/topic/200554/

在网上查了很多资料都是说本机装了两个JDK,JDK版本不同间的冲突. 但我本机只有一个JDK. 不应该是这个问题. 重装了JDK都没用. 还是同事厉害,找到问题所在了.见下图:

<?xml version="1.0"encoding="UTF-8"?>
<faceted-project>
 <fixed facet="jst.java"/>
 <fixed facet="jst.utility"/>
 <installed facet="jst.java"version="5.0"/>
 <installed facet="jst.utility"version="1.0"/>
</faceted-project>

里面的5.0是修改后的,修改前是6.0.

#Mon Jan 28 15:04:15 CST 2008
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
org.eclipse.jdt.core.compiler.compliance=1.5
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.5

里面的1.5都是从1.6修改过来的. 这个项目是从同事手中交接过来的,同事是使用JDK1.6的. 修改后,重启tomcat,问题解决了.

猜你喜欢

转载自fantaxy025025.iteye.com/blog/2209905
今日推荐