java.lang.UnsupportedClassVersionError:.class文件中的版本号错误?

问题

当我包含一个我必须从源代码编译的开源库时,我收到此错误。现在,网上的所有建议都表明代码是在一个版本中编译的,并在另一个版本中执行(旧的新版本)。但是,我的系统上只有一个版本的JRE。如果我运行命令:

$ javac -version
javac 1.5.0_18

$ java -version
java version "1.5.0_18"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_18-b02)
Java HotSpot(TM) Server VM (build 1.5.0_18-b02, mixed mode)

并在Eclipse中检查java库的属性,我得到1.5.0_18

因此,我必须得出一些其他内容,类本身内部,抛出异常?这有可能吗?


#1 热门回答(183 赞)

我已经知道像这样的错误消息通常是正确的。当它不可能(在你的脑海中)被报告的错误所说的时候,你去寻找另一个地区的问题...只是发现原来的错误信息确实正确。

既然你正在使用Eclipse,我认为Thilo是正确的。你得到这个消息的最可能的原因是因为你的一个项目正在编译1.6个类。如果你在系统上只有1.5 JRE并不重要,因为Eclipse有自己的编译器(不是javac),只需要1.5 JRE来编译1.6类。这可能很奇怪,并且需要取消选中设置才允许这样做,但我只是设法做到了。

对于有问题的项目,请检查项目属性(通常为Alt Enter),Java Compiler部分。这是一个配置为编译1.6的项目的图像,但只有1.5 JRE。

enter image description here


#2 热门回答(8 赞)

你是否尝试过完全"干净"然后在Eclipse中重建(Project-> Clean ...)?

你能直接从命令行编译和运行"javac"和"java"吗?这是否正常?

如果右键单击项目,请转到"属性",然后转到"Java构建路径",任何选项卡下是否有可疑条目?这基本上就是你的CLASSPATH。

在Eclipse首选项中,你可能还需要仔细检查"Java"部分中的"已安装的JRE"部分,并确保它符合你的预期。

你肯定有一个陈旧的.class文件存在于某个地方,或者你正在使用的Java版本中得到编译时/运行时不匹配。


#3 热门回答(5 赞)

你用Eclipse编译了吗?它使用不同的编译器(不是javac)。这不应该导致此错误(如果一切配置正确),但你可以尝试使用javac编译它。

如果这解决了问题,请尝试查看Eclipse是否有一些不正确的编译器设置。特别是它以Java 5为目标。