2010-03-18 62 views
136

当我包含必须从源代码编译的开源库时,出现此错误。现在,网络上的所有建议都表明代码被编译为一个版本,并以另一个版本(旧的新版本)执行。但是,我的系统上只有一个JRE版本。如果我运行命令:java.lang.UnsupportedClassVersionError:.class文件中的版本号错误?

$ 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

因此,我不得不得出结论别的东西,内部的类的本身,被扔例外??这甚至有可能吗?

+2

您是否有位于其他地方的库的编译版本,可能首先在您的类路径上? – 2010-03-18 00:45:36

+0

好主意,但没有。我通过使用“查找”进行了检查。 -name'* .jar'| xargs使用JAR从lib文件夹中找到'。另外,我没有想到Eclipse使用CLASSPATH? 还有其他什么好建议吗? – 2010-03-18 01:13:18

+0

如何在cmd上使用这个find -name'* .jar'命令,因为我正在寻找重新生成jre src代码......并且为此我需要启动此cmd ..... http:// www。 javalobby.org/java/forums/t103334.html.....my jdk位于C:\ Program Files \ Java \ jdk1.6.0_31 – 2012-04-22 16:26:32

回答

183

我知道像这样的错误信息通常是正确的。当它不可能(在你的想法中)被报告的错误是什么时,你在另一个区域寻找问题......只是在几小时后才发现原来的错误信息确实是正确的。

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

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

enter image description here

+0

完全同意......这就是为什么我在我的评论中询问如何针对性的问题。我不知道Eclipse的内部类。该库在命令行上用'javac'编译并集成到我的Eclipse项目中。我将尝试从命令行编译我的项目。你显然已经在过去解决了这个问题,你的建议非常棒。 – 2010-03-18 14:03:35

+3

如果你有JDK(有源代码),你应该可以在Eclipse中添加一些断点,并希望看到它试图加载的类。最简单的方法可能是UnsupportedClassVersionError(或者Eclipse异常断点,'J!'图标)的构造函数中的断点,然后您可以检查它是如何到达那里的。 – 2010-03-18 14:54:32

+0

好的。我在大楼里找到了一位专家,他能够将Eclipse指向与我的命令行相同的JRE。然后我重建了1.6,并对1.6运行,这一切都工作。很显然,我错误的是除了1.5之外没有任何东西。他让我看看在哪里看。 感谢您的帮助 - 现在我正在解决我的下一个问题! :) – 2010-03-18 15:15:03

5

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

如果这样可以解决问题,请尝试查看Eclipse是否有一些不正确的编译器设置。具体来说,它的目标是Java 5.

+0

这就是我正在学习的东西。我将尝试以同样的方式构建这两个部分(cmd行和/或eclipse)。 – 2010-03-18 14:05:54

+1

感谢Thilo,今天我学到了很多关于Eclipse和Java和类的版本。还有一点关于* ant *的。 – 2010-03-18 15:16:48

8

你有没有尝试做一个完整的“干净”,然后在Eclipse中重建(项目 - >清洁...)?

是否可以直接从命令行编译并运行“javac”和“java”?这是否正常工作?

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

在Eclipse首选项中,您可能还需要仔细检查“Java”部分中的“已安装的JRE”部分,并确保它与您认为应该匹配。

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

+0

是(完全清洁);没有尝试过(从cmd行项目);可能/没有(我从Eclipse中删除了条目“Java Build Path”);做到了这一点(JRE - 这是我获得版本号的地方)。 – 2010-03-18 14:05:37

0

另一个场景,这可能发生的情况是,当你从一个主机日食推出的Eclipse的一个实例(用于调试等) - 在这种情况下,改变该项目的类路径中项目的级别或JRE库独自一人无济于事。重要的是JRE用于启动目标eclipse环境。

1

还要检查项目中已编译为更高版本的Java的任何jar文件。如果这是你自己的图书馆,你可以通过改变目标的版本属性解决这个问题给javac

<javac destdir="${classes.dir}" 
      debug="on" classpathref="project.classpath" target="1.6"> 
0

务必检查明显了。当我意外地抓取服务器的添加和删除操作的错误资源时,我得到了这个错误。它可以很容易忽略。

0

从项目文件夹中删除项目特定的设置文件(Eclipse工作区/项目文件夹/ .settings /)也可以。 显然,我们需要在删除后做一个项目清理和构建。

2

我也有同样的错误。我正在使用Maven编译项目的原因。我有JAVA_HOME指向JDK7,因此Java 1.7正在用于编译,并且在运行JDK1.5时使用该项目。在屏幕截图中更改.classpath文件中的以下条目或更改eclipse可解决问题。

classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5 

或在Eclipse的运行configuarions改变项目中使用的Java 1.7变化为 enter image description here

0

:对于这项工作遵循这些步骤:

  • 更改编译符合水平
  • 将您的项目JRE/JDK更改为相同级别的东西(在我的情况下为1.7)
  • 做同样的改变项目由项目
  • 更改运行/调试配置为使用JRE/JDK(或同级)

不工作参考?

  • 删除项目的Bin目录
  • 清洁
  • 重建

仍然无法正常使用?

在项目的目录:编辑.settings/org.eclipse.jdt.core.prefs>请确保您的目标水平应用

祝您好运!

相关问题