8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何修复 java.lang.UnsupportedClassVersionError:不支持 major.minor 版本

CraftyB 3月前

465 0

我正在尝试使用 Notepad++ 作为我的一体化工具编辑、运行、编译等。我已经安装了 JRE,并且已经将路径变量设置为 .../bin 目录。当我在 Notepad 中运行我的 \'Hello world\' 时...

我正在尝试使用 Notepad++ 作为我的一体化工具编辑、运行、编译等。

我已经 JRE ,并且已经设置了 .../bin 目录的路径变量。

当我在 Notepad++ 中运行“Hello world”时,收到以下消息:

java.lang.UnsupportedClassVersionError: test_hello_world :
 Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
       .........................................

我认为这里的问题是关于版本;Java 的某些版本可能太旧或太新。

  1. 我如何解决它?
  2. 我应该安装 JDK,并将路径变量设置为 JDK 而不是 JRE 吗?
  3. JRE和JDK中的变量 PATH 有什么区别
帖子版权声明 1、本帖标题:如何修复 java.lang.UnsupportedClassVersionError:不支持 major.minor 版本
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由CraftyB在本站《eclipse》版块原创发布, 转载请注明出处!
最新回复 (0)
    • 的 Java 设置 Eclipse 为 JDK 7.0.55。
    • 通过在构建路径上配置 JDK 7.0.55,使用 JDK 7.0.55 构建项目。
    • -> Windows -> Preferences -> Java 在 Eclipse 中将编译器设置为 JDK 7.0.55 Compiler - 选择 1.7。
  • 您已经使用 JDK 7 编译了 Java 类,并且正尝试在 JDK 6 上运行相同的类。

  • 我遇到的问题是,为了运行我的单元测试,我必须从命令行在我的项目上运行 Maven 编译;如果我对测试类进行了更改并让 Eclipse 自动重新编译它,那么我会收到“不支持的 major.minor 版本 51.0”错误。

    我确实安装了 JDK6 和 JDK7,但我的所有 JRE 设置都指向 1.6,无论是在 pom 中还是在 Eclipse 中的项目属性页面中。无论使用多少次 Maven 更新项目和/或刷新都无法解决这个问题。

    最后,我尝试关闭该项目并重新打开它,这似乎解决了问题!HTH

  • 谢谢!您的回答对我帮助很大,因为我在其他地方更改了服务器配置,但问题仍然存在;按照您的回答解决了问题。我更改配置的方式如下:1) 在 Eclipse 上打开服务器概览 2) 打开启动配置 3) 转到选项卡类路径 4) 为新的 JRE/JDK 添加 bootsrap 和用户条目 5) 删除旧条目 6) 应用并关闭。我希望它可以帮助某人避免这种错误

  • 就我而言,问题出在服务器运行时配置中:

    Server Runtime Environment

    检查JRE是否是您需要的版本:

    enter image description here

    该项目的版本为 1.7,服务器 JRE 设置为 1.6,更改为正确的 Java 版本后,它可以正常运行。

  • 首先,让我们了解一些基础知识……

    中的一个组件 NetBeans / Eclipse ,它将为您提供库、JVM、Java 插件和 Java web start。请注意,它不提供编译器或调试器。

    JDK 是 JRE 以及编译器和调试器的超集。

    因此,当您的默认库是 JRE 而不是 JDK 时,您可以很轻松地导入内容,但无法编译。

    相反,将您的路径设置为 JDK(我使用 NetBeans,并且我使用 netbeans.conf 在 netbeans/etc/netbeans.conf 中设置它们并更改路径)。

  • 哦,Mac OS XI 可以通过设置 JAVA_HOME 变量来解决这个问题:

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home
    
  • Jin 3月前 0 只看Ta
    引用 9

    您的 Java 文件是使用与您尝试运行它的版本(较低的运行时版本)不同的版本(较高的编译器版本)编译的。

    基本理解是,用较低版本编译的类应该可以在更高版本中运行。但相反的情况(用较高版本的编译器编译并尝试用较低的运行时版本运行)有时是完全不可能的。

    因此,当您尝试执行程序时,会显示此错误。 不支持 major.minor 版本 xx

    问: 我使用 Java 7 创建了一个应用程序,但当我的用户尝试运行它时,他们收到“不支持 major.minor 版本 51.0”错误。这是什么意思?我该怎么办?

    答: 如果您在 Java 7 中使用 javac 编译应用程序,则生成的类文件将具有 51.0 版本号。Java 7 之前的版本无法识别此数字,因此您的用户必须先升级到 Java 7 才能运行您的应用程序。如果您未使用任何 Java 7 API,则可以尝试使用 javac -target 1.6 编译应用程序以创建与 1.6 兼容的类文件。如果您的应用程序是使用 webstart 部署的,则可以指定所需的最低版本。有关更多信息,请参阅此处的 Java Web Start 和 JNLP 文档。一旦我们为当前桌面上装有 Java 6 的最终用户触发自动更新到 Java 7,此问题就会消失。此时间表尚未确定,我们希望给开发人员时间先解决他们的代码和 JDK 7 之间的任何问题。

    (来源: oracle.com 。)

  • 我解决了。我运行了:

    JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
    

    这个错误具有误导性。 Unsupported major.minor version 51.0 它给人的印象是版本 51(Java 7)不受支持。我们应该使用 Java 6。

    错误应该是:

    当前 Java 版本 50 不受支持。请改用 Java 版本 7(51:0 及更高版本)。`

  • 7 Tomcat Tomcat Ubuntu 12.04.2 LTS 中出现了以下错误信息

    /var/log/tomcat7/localhost.2014-04-08.log:
    2014 年 4 月 8 日上午 9:00:55 org.apache.catalina.core.StandardContext filterStart
    严重:启动过滤器 struts2 时发生异常
    java.lang.UnsupportedClassVersionError:controller/ReqAccept:不支持 major.minor 版本 51.0(无法加载类 controller.ReqAccept)

    程序 Struts 是使用Java 7编译的。

    事实证明,有人使用 \'service tomcat [stop/start]\' 重新启动 Tomcat 7,

    $ ps -ef | grep java
    tomcat7 31783 1 32 20:13 ?00:00:03 /usr/lib/jvm/default-java/bin/java...
    $ /usr/lib/jvm/default-java/bin/java -版本
    Java 版本 \'1.6.0_27\'

    这会导致“不支持 major.minor 版本 51.0”错误。

    当我们使用'/etc/init.d/tomcat7 [stop/start]'重新启动Tomcat 7时,问题得到解决。

    $ ps -ef | grep java
    tomcat7 31886 1 80 20:24 ? 00:00:10 /usr/local/java/jdk1.7.0_15/bin/java
    $ /usr/local/java/jdk1.7.0_15/bin/java -版本
    Java 版本 \'1.7.0_15\'

  • 当我恢复到 Java 6 并尝试运行以前用 Java 7 编译的类时遇到了这个问题。对我有用的是“首选项”>“java”>“编译器”-->将合规级别设置为 1.6 并至关重要地“配置项目设置”。

  • 我如何解决它?

    此错误意味着用于执行类代码的 JRE 无法识别所用的 Java 版本。通常是因为生成(即编译)类文件的 Java 版本较新。

    要修复此问题,您可以

    a) 使用与运行 Java 源代码时相同或更旧版本的 Java 编译器来编译它。即安装适当的 JDK。

    b) 使用较新版本的 Java 编译器以兼容模式编译您的 Java 源代码。即使用参数 -target

    c) 在与用于编译类的 JDK 相同或更新版本的 JRE 中运行已编译的类。

    编译器和 javac -version 运行时的 java -version 版本

    我是否应该安装 JDK,并将 PATH 变量设置为 JDK 而不是 JRE?

    对于编译,当然,安装并配置您想要的特定 JDK。

    对于运行时,您可以使用 JDK 或独立 JRE 附带的运行时,但无论如何,请确保您已安装正确的版本并且已配置 PATH 以免出现意外。

    JRE 和 JDK 中的 PATH 变量有什么区别?

    PATH 环境变量告诉命令 shell 在哪里查找您输入的命令。当您输入时 java ,命令 shell 解释器将 PATH 从左到右查找变量中指定的所有位置,以查找 java 要运行的适当的运行时可执行文件。如果您安装了多个版本的 Java - 即您 java 在 PATH 变量中指定的多个位置都有可执行文件,那么从左到右遇到的第一个文件将是要执行的文件。

    编译器命令 javac 仅随 JDK 提供。运行时命令 java 随 JDK 提供,位于 JRE 中。

    很可能您 javac 安装了一个版本(51.0 = Java 7),并且还安装了相同版本的 java ,但是另一个先前版本 java 在 PATH 中出现得更早,因此被调用的是,而不是您期望的版本。

  • 您已使用较高版本的 JDK 进行编译并尝试从较低版本的 JDK/ JRE .

    要检查这一点,请查看版本信息:

    javac -version
    
    java -version
    

    它们会有所不同,并且 javac 会具有更高的版本号。

    为了解决这个问题,请使用 JDK 版本的 java 运行,或者如果您有较新的 JRE/JDK 也可以运行。

    which javac 会告诉你位置,例如, /usr/bin/javac 只需直接运行 /usr/bin/java <program> .

    或者您可以将环境变量设置为永久解决方案。

  • 我在 Eclipse 中运行 Ant 时遇到了同样的错误消息,但这里提到的其他解决方案都无法解决我的问题。有趣的是,从 Windows 命令行运行 Ant 运行正常,因此这一定是 Eclipse 中的配置问题。

    事实证明,在 Eclipse 下您可以指定 Ant 应运行的环境,并且将其设置为 JRE 而不是 JDK。

    • 转到:运行->外部工具->外部工具配置...
    • 为您的项目选择 Ant build.xml(如果您有多个项目)
    • 激活“JRE”选项卡
    • 这里选择了“单独的 JRE:jre6”。当我将其更改为 1.6 或 1.7 系列的 JDK 时,错误就消失了。
  • 时遇到此问题 Maven ,可以使用插件 Maven Compiler .

     <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.1</version>
                    <configuration>
                        <source>1.6</source>
                        <target>1.6</target>
                    </configuration>
                </plugin>
           .....
    

    更新: source 如果您使用的是 JDK 8, target 1.8

  • 引用 18

    正如其他地方的一些人所回答的那样,Java 程序正在运行的 Java 版本比编译它的版本要旧。它需要“交叉编译”才能实现向后兼容。换句话说,源 Java 版本和目标 Java 版本不匹配。

    更改 Eclipse 菜单中的选项无法回答原始发帖者的问题,他说他/她没有使用 Eclipse。在 OpenJDK javac 版本 1.7 上,如果您使用参数 -source -target ,则可以交叉编译 1.6,并在编译时提供 rt.jar 文件。如果您实际安装了 1.6 JRE,则可以指向其安装(例如,Ubuntu 上的 /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar,SunOS 上的 /usr/jdk/jdk1.6.0_60/jre/lib/rt.jar。抱歉,我不知道它在 Windows 系统上的位置)。像这样:

    javac -source 1.6 -target 1.6 -bootclasspath /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar HelloWorld.java
    

    看起来你可以直接从网上下载 rt.jar,然后指向它。不过这并不优雅:

    javac -source 1.6 -target 1.6 -bootclasspath ./rt.jar HelloWorld.java
    
  • 基于此...

    J2SE 8 = 52
    J2SE 7 = 51
    J2SE 6.0 = 50
    J2SE 5.0 = 49
    JDK 1.4 = 48
    JDK 1.3 = 47
    JDK 1.2 = 46
    JDK 1.1 = 45
    

    在 Eclipse 中,右键单击包资源管理器中的项目:

    构建路径 -> 配置构建路径

    在下面:

    Java 构建路径 ->-> 添加库 -> JRE 系统库 -> 已安装的 JRE -> 搜索 .

    搜索完成后,通过选择列表中的库来添加所需的 JRE。

  • 当我安装 JDK 1.7时,问题就解决了。

返回
作者最近主题: