【问题标题】:java.lang.UnsupportedClassVersionError: Bad version number in .class file?java.lang.UnsupportedClassVersionError:.class 文件中的版本号错误?
【发布时间】:2011-01-28 20:07:11
【问题描述】:

当我包含一个必须从源代码编译的开源库时,我收到此错误。现在,网络上的所有建议都表明代码是在一个版本中编译并在另一个版本中执行的(新旧版本)。但是,我的系统上只有一个版本的 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

因此,我必须得出结论,一个类本身的内部,是抛出异常吗?这可能吗?

【问题讨论】:

  • 你在其他地方是否有一个编译版本的库,可能首先在你的类路径上?
  • 好主意,但不行。我使用 'find 进行了检查。 -name '*.jar' | xargs locate' 来自带有 JAR 的 lib 文件夹。此外,我不认为 Eclipse 使用了 CLASSPATH?还有什么好的建议吗?
  • 如何在 cmd 上使用这个 find -name '*.jar' 命令,因为我正在寻找再次重建 jre src 代码......为此我需要触发这个 cmd...... .javalobby.org/java/forums/t103334.html.....my jdk 位于 C:\Program Files\Java\jdk1.6.0_31

标签: java version


【解决方案1】:

我了解到像这样的错误消息通常是正确的。当它不可能(在您的脑海中)是所报告的错误所说的那样时,您会在另一个领域寻找问题......只是在几个小时后才发现原来的错误消息确实是正确的。

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

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

【讨论】:

  • 完全同意...这就是为什么我在评论中询问如何确定问题的原因。我不知道 Eclipse 内部类。该库是在命令行上使用“javac”编译的,并集成到我的 Eclipse 项目中。我将尝试从命令行编译我的项目。您过去显然已经解决了这个问题,而且您的建议很棒。
  • 如果你有 JDK(它有源代码),你应该能够在 Eclipse 中添加一些断点,并希望看到它试图加载的类。最简单的方法可能是 UnsupportedClassVersionError 的构造函数中的断点(或 Eclipse 异常断点,“J!”图标),然后您可以检查它是如何到达那里的。
  • 好的。我在大楼里找到了一位专家,他能够将 Eclipse 指向与我的命令行相同的 JRE。然后我针对 1.6 进行了重建并针对 1.6 运行,一切正常。显然,我错了除了 1.5 之外什么都没有。他指给我看哪里。感谢您的帮助-现在我要解决下一个问题了! :)
  • 我遇到了同样的问题。我犯的错误是我使用的是 1.5 JRE 和 1.6 编译器。哪个没有解决 unsupportedclassversion 错误。所以我在我的 Eclipse 中安装了 1.6 JRE 并使用了 1.6 编译器。然后一切都开始正常了。
  • 很好的答案。我有许多不会升级到 1.6 的 xServer。谁会想到!
【解决方案2】:

您是否尝试过完全“清理”然后在 Eclipse 中重建(项目->清理...)?

您是否能够直接从命令行使用“javac”和“java”进行编译和运行?这样可以正常工作吗?

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

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

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

【讨论】:

  • 是(完全清洁);没有尝试过(来自 cmd 行的项目);也许/否(我从 Eclipse“Java 构建路径”中删除了条目);做到了(JRE - 那是我得到版本的地方#)。
【解决方案3】:

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

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

【讨论】:

  • 这就是我正在学习的。我将尝试以相同的方式构建这两个部分(cmd 行和/或 eclipse)。
【解决方案4】:

我也遇到了同样的错误。原因是我使用 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 的运行配置更改为

【讨论】:

    【解决方案5】:

    还要检查项目中是否为更高版本的 Java 编译的所有 jar 文件。如果这些是您自己的库,您可以通过将目标版本属性更改为 javac 来解决此问题

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

    【讨论】:

      【解决方案6】:

      另一种可能发生这种情况的情况是,当您从主机 eclipse 启动 eclipse 实例(用于调试等)时 - 在这种情况下,仅在项目的类路径上更改项目的级别或 JRE 库没有帮助。重要的是用于启动目标 eclipse 环境的 JRE。

      【讨论】:

        【解决方案7】:

        也总是检查明显的。当我不小心为服务器的添加和删除操作获取了错误的资源时,我得到了这个错误。这很容易被忽视。

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

            将项目更改为使用 java 1.7:为此,请按照以下步骤操作:

            • 更改编译器合规级别
            • 将您的项目 JRE/JDK 更改为相同级别(在我的情况下为 1.7)
            • 对项目引用的所有项目进行相同的更改
            • 更改运行/调试配置以使用 JRE/JDK(或相同级别)

            不工作?

            • 删除项目Bin目录
            • 干净
            • 重建

            还是不行?

            在您的项目目录中:编辑 .settings/org.eclipse.jdt.core.prefs > 确保应用了您的目标级别

            祝你好运!

            【讨论】:

              【解决方案10】:

              我通过更改服务器所需的 jre 解决了这个问题(在我的例子中是 tomcat)。 在 Eclipse 的 Server 选项卡中,双击服务器(为了打开服务器配置页面),点击 Runtime environment,然后更改 JRE required

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-04-10
                相关资源
                最近更新 更多