问题描述
我几次尝试改写我的Java时都遇到了此错误。在Internet上查找解决方案,大多数建议是使用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)
Id不需要每次从命令行编译和运行Java文件时都必须使用标志。如果您能解释为什么首先发生此问题,奖金将为您指出。当我学习Java时,您曾经不得不分别下载和安装JRE和JDK。我可以理解错误地下载了不兼容的版本,但是现在看来JRE预先包装了JDK。如果是这种情况,怎么可能会有不兼容的编译器和解释器版本?
解决方法
java.lang.UnsupportedClassVersionError:com / example / demo / DemoApplication已由较新版本的Java Runtime编译(类文件版本59.65535),此版本的Java Runtime仅可识别58.0以下的类文件版本 编译和运行项目时,将JDK设置为同一JDK:
也就是说,您的文件是由JDK15编译的,但是当前运行时(也安装在您的计算机上)是JDK14。构建和编译jdk版本不匹配导致此错误。
有两个重要的配置可以正确配置您的环境和项目:java.configuration.runtimes
和java.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 ,并
有关java.configuration.runtimes
和java.home
的更多信息,请参阅Configure JDK。
此错误告诉您,您的类是使用比您尝试使用的版本更高的Java版本编译的。更具体地说,在这种情况下,您使用Java 15编译了类并尝试使用Java 14运行它。
根据您的情况,有两种方法可以解决该错误:使用Java的早期版本编译代码,或在Java的较新版本上运行代码。
通过命令行修复。如果您准备完全迁移到较新的JDK,则应下载较新的版本,并确保正确设置了PATH和JAVA_HOME环境变量。假设您具有Java 15 JRE,则可以使用与其一起打包的java命令来运行代码。
IntelliJ IDEA 。您还可以控制在IntelliJ IDEA中用于编译和运行的Java版本。转到文件->项目结构…->项目设置->项目,然后更改您的 Project SDK 和项目语言级别。接下来,在更新的JRE上运行项目:转到 Run-> Edit Configurations…,然后将JRE更改为15。现在,当您运行项目时,它将与Java 15 JRE一起运行。>