[英]Troubleshooting UnsupportedClassVersionError in IntelliJ IDEA
我正在学习使用 Intellij IDEA 的 Java 课程。 在这个“测试”项目中,我只有两个测试类,如下所示(它们实际上没有任何代码)。 在我进入问题之前,我只需要声明我所有的项目都运行正常,只是我在运行终端命令时遇到了以下问题,我担心我的 IDE 搞砸了:
当我需要使用以下命令获取类 BankAccount 的串行版本时,就会出现问题:
E:\Software Projects\Test\out\production\Test>serialver com.company.BankAccount
我收到如下所示的错误,并且我知道这些类是由较新的 Java 运行时错误编译的,但是如何在 Intellij 中解决此问题? 在任何项目的任何类上运行命令时,我都会遇到同样的错误。
附加说明:在终端中使用 java com.company.Main 运行 Main 类时,我也遇到了与此相关的错误
我认为可能是问题的原因:在第一次尝试“serialver”之前,我更改了项目文件夹的名称(我只是在 Windows 的文件资源管理器中使用了“重命名”,它把一切都搞砸了在 Intellij 中(无论我打开什么项目,它都没有 SDK,也没有运行/调试配置)。所以,我在一个项目(或类似的东西)上选择了“添加 SDK”,并从列表中选择了一个 JRE 12。然后我运行了“调试” Main”和运行/调试配置是自动设置的。
当我转到项目结构 > 项目设置 > SDK 时,我只有一个 SDK:“C:\\Program Files\\Java\\jdk-12.0.1”。
当我转到项目中的“运行/调试配置”时,在 Application > Main 的 JRE 中,我有以下选择(但据我所知,这些都是同一个 SDK,对吧?):
所以我不知道如何在这里调整任何东西? 我如何能够在任何时候以较新的 Java 运行时版本编译这些类?
这里的问题是我不确定是否还有其他问题,或者我之前所做的调整是否搞砸了某些事情。
课程:
package com.company;
public class Main {
public static void main(String[] args) {
// write your code here
}
}
package com.company;
public class BankAccount {
}
运行时E:\\Software Projects\\Test\\out\\production\\Test>serialver com.company.BankAccount
我在终端中得到的是以下错误:
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/company/BankAccount has been compiled by a more recent version of the Java Runtime (class file version 56.
0), this version of the Java Runtime only recognizes class file versions up to 55.0
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:550)
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:458)
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:452)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:398)
at jdk.compiler/sun.tools.serialver.SerialVer.resolveClass(SerialVer.java:108)
at jdk.compiler/sun.tools.serialver.SerialVer.serialSyntax(SerialVer.java:80)
at jdk.compiler/sun.tools.serialver.SerialVer.main(SerialVer.java:188)
使用E:\\Software Projects\\Test\\out\\production\\Test>java com.company.Main
运行 Main 类时出错:
Error: LinkageError occurred while loading main class com.company.Main
java.lang.UnsupportedClassVersionError: com/company/Main has been compiled by a more recent version of the Java Runtime (class file version 56.0), this version of the Java Runtime only recognizes class file versions up to 55.0
在命令行中运行java -version
。 如果不是 Java 12 或更高版本,它将解释该问题。 您的目标是 Java 12 版本,同时在较旧的 Java 版本上运行它。
解决方案是调整目标语言级别,以便您的代码可以在较旧的 Java 版本上运行,或者调整您的PATH
环境,以便 JDK 12 安装目录中的java
是第一个。 或者您可以在尝试运行代码时在命令行中指定java.exe
的完整路径:
E:\Software Projects\Test\out\production\Test>"C:\Program Files\Java\jdk-12.0.1\bin\java.exe" com.company.Main
通过编辑文件“idea.properties”并设置适当的JVMVersion解决
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.