解决UnsupportedClassVersionError: Unsupported major.minor version | Java Debug 笔记

757 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

问题

我正在尝试使用 Notepad ++ 作为我的 IDE 工具进行编辑,运行,编译等。

我已经安装了 JRE 环境,并将 path 环境变量设置到 .../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,然后将 path 环境变量设置为 JDK 的而不是 JRE 的吗?
  3. JDKJREpaht 环境变量有什么区别?

回答

回答1

下面显示的版本号描述了 class 文件兼容的 JRE 版本。

对应关系如下:

(来源:维基百科)

Java SE 17 = 61,
Java SE 16 = 60, 
Java SE 15 = 59,
Java SE 14 = 58,
Java SE 13 = 57,
Java SE 12 = 56,
Java SE 11 = 55,
Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

要解决实际问题,您应该尝试使用 Java JRE 的较新版本来运行 Java 代码,或者在 Java 编译时指定目标参数,告诉编译器创建与之兼容的代码。

例如,为了生成与 Java 1.4 兼容的 class 文件,请使用以下命令行:

javac -target 1.4 HelloWorld.java

使用较新版本的 Java 编译器,您您可能会收到有关未设置 bootstrap 类路径的警告。更多关于此错误信息的说明,请参考文章:New javac warning for setting an older source without bootclasspath

回答2

java.lang.UnsupportedClassVersionError 之所以会发生这种情况,是因为在编译时有一个较高版本的 JDK,而在运行时有一个较低版本的 JDK

Project -> Properties -> Java Compiler,启用项目设置,然后选择 Compiler Compliance Level1.71.61.5,再构建并测试您的应用程序。

总结

译者补充

这个问题的根本在于是您的 Java 编译时和 Java 运行时的 Java版本不一致导致的,即:JDK 和 JRE 的版本不一致。

为了避免这种问题,最好确保编译环境和运行环境使用的版本完全一致。

翻译内容来源Stack Overflow:stackoverflow.com/questions/1…