如何修复 Java UnsupportedClassVersionError

How to fix Java UnsupportedClassVersionError

我 运行 遇到过几次这个错误,试图重温我的 Java。在互联网上查找解决方案,大多数建议是使用 flag/option 参数编译或 运行 文件以指定正确的解释器版本。我的问题是,是否有更永久的解决方案? (我正在使用 vscode。我想我可以在工作区的 settings.json 文件中添加一些东西——但是什么?)

Error: LinkageError occurred while loading main class com.example.demo.DemoApplication
        java.lang.UnsupportedClassVersionError: com/example/demo/DemoApplication has been compiled by a more recent version of the Java Runtime (class file version 59.65535), this version of the Java Runtime only recognizes class file versions up to 58.0

这是我的版本详情

$ java --version
java 14.0.2 2020-07-14
Java(TM) SE Runtime Environment (build 14.0.2+12-46)
Java HotSpot(TM) 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing)

我不想在每次从命令行编译和 运行 java 文件时都使用标志。如果您能首先解释为什么会出现此问题,则可以加分?当我学习 java 时,您曾经不得不分别下载和安装 JRE 和 JDK。我可以理解错误地下载了不兼容的版本,但现在看来 JRE 预打包了 JDK。如果是这种情况,怎么可能有编译器和解释器的不兼容版本?

java.lang.UnsupportedClassVersionError: com/example/demo/DemoApplication has been compiled by a more recent version of the Java Runtime (class file version 59.65535), this version of the Java Runtime only recognizes class file versions up to 58.0 Set the JDK the same one when you compile and run the project:

也就是说,你的文件是JDK15编译的,但是你机器上安装的当前运行时间是JDK14。构建和编译 jdk 版本不匹配导致此错误。

有两个重要的配置可以正确配置您的环境和项目:java.configuration.runtimesjava.home。前者指定项目执行环境的选项;后者指定您的语言服务器的执行环境。

你已经安装了JDK14,设置上面两个设置使用它可以解决这个错误。

"java.home": "\PATH TO JDK14\",
"java.configuration.runtimes": [
    {
        "name": "JavaSE-14",
        "path": "\PATH TO JDK14\",
        "sources": "\PATH TO JDK14\lib\src.zip",
        "javadoc": "https://docs.oracle.com/en/java/javase/14/docs/api",
        "default": true
    },      
],

清理 Java 语言服务器 Worspace 在 VS Code 中重新加载 window,然后 运行 再次。

更多关于java.configuration.runtimesjava.home的信息,请参考Configure JDK

此错误告诉您,您的 class 是在比您尝试 运行 更高版本的 Java 上编译的。更具体地说,在这种情况下,您使用 Java 15 编译了 class 并尝试使用 Java 14 运行 它。

根据您的情况,您有两种解决错误的方法:使用较早版本的 Java 编译您的代码,或者 运行 在较新的 Java 版本上编译您的代码.

通过命令行修复。如果您准备好完全迁移到较新的 JDK,您应该下载较新的版本并确保您的 PATH 和 JAVA_HOME 环境变量设置正确。假设您有 Java 15 个 JRE,您可以 运行 您的代码与打包在一起的 java 命令。

IntelliJ IDEA。您还可以控制在 IntelliJ IDEA 中用于编译和 运行ning 的 Java 版本。转到 文件 -> 项目结构... -> 项目设置 -> 项目 并更改你的 Project SDK项目语言级别。接下来 运行 您的项目在较新的 JRE 上:转到 运行 -> 编辑配置... 并将您的 JRE 更改为 15。现在,当您 运行 你的项目,它将 运行 与 Java 15 JRE。