【问题标题】:UnsupportedClassVersionError despite same version of Java尽管 Java 版本相同,但 UnsupportedClassVersionError
【发布时间】:2012-04-21 07:40:58
【问题描述】:

我在我的目标计算机上收到此错误,尽管:

  1. 我的源计算机和目标计算机都安装了相同版本的 Java - 1.6 第 26 次更新
  2. 我以类似方式编译和运行的所有文件都可以完美运行,除了这个 - 它是我的应用程序的 Swing GUI
  3. 另外我没有使用任何 IDE,我使用普通记事本进行编辑

为什么UnsupportedClassVersionError尽管存在三个限制,以及它的解决方案?

注意:该文件是一个简单的 GUI 前端代码,可以在源代码上完美运行,它使用了来自 AWT 和 SWING 的简单库

Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)

【问题讨论】:

    标签: java swing class unsupported-class-version


    【解决方案1】:

    不幸的是,事实上,您的主类是用比您运行它的新版本的 Java 编译器编译的。那个或你的类文件以某种其他方式被严重损坏了。检查您的PATH 上没有安装多个版本的javajavac。您可能还想尝试将-target 1.6 传递给 javac;如果您正在运行(例如)javac 1.7,这将指示它生成与 Java 1.6 兼容的代码。

    请记住,您可以安装不同版本的 JRE 和 JDK - 根据您的 PATH 顺序,您的系统可能会为 javac 选择 Java 1.7,而为 java 选择 Java 1.6。

    此外,如果您的类路径中有任何第三方库,您应该确保它们也不是使用较新版本的 Java 编译的。如果您的其他类没有使用可能掩盖问题的第三方库。

    【讨论】:

    • -target 1.6 仅确保该版本的正确幻数和类格式。要获得更好的兼容性测试,请同时使用 source & -bootclasspath 选项。
    • @AndrewThompson,确实如此,但 OP 报告的问题特别是关于错误的幻数和/或类格式,所以这是一个很好的第一步。
    • 其实我是在目的地编译代码,得到同样的错误!
    • @Purushottam,就像我说的,您可能安装了多个 Java 版本,而 java 和 javac 正在使用不同的版本
    • 是的,我的路径和类路径中有不同且不兼容的 JDK 和 JRE 版本。问题已解决,非常感谢!
    【解决方案2】:

    当你试图运行在不同版本的 JDK 中编译的类以在不同版本的 JRE 上执行时,会发生这种情况,

    请检查您的 jdk 和 JRE 版本是否相同或兼容。您可以使用 java -version 检查版本

    【讨论】:

    • 我已经提到我的JRE和JDK安装的版本相同
    猜你喜欢
    • 2020-07-04
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2019-02-14
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多