解决 IntelliJ IDEA 中的 UnsupportedClassVersionError

Troubleshooting UnsupportedClassVersionError in IntelliJ IDEA

我正在学习 Java 课程,使用 Intellij IDEA。在这个 "Test" 项目中,我只有两个测试 class 如下所示(它们确实没有任何代码)。 在我进入问题之前,我只需要声明我所有的项目 运行 正确,只是我在 运行ning 终端命令时遇到以下问题,恐怕我搞砸了跟上我的 IDE:

当我需要使用以下命令获取 class BankAccount 的序列版本时出现问题:

E:\Software Projects\Test\out\production\Test>serialver com.company.BankAccount

我收到如下所示的错误,我知道 classes 是由较新的 Java 运行时错误编译的,但是我该如何在 Intellij 中解决这个问题?在任何项目中对任何 class 执行 运行 命令时,我都会遇到同样的错误。

附加说明:当 运行 在终端中使用 java com.company.Main

连接 Main class 时,我也收到与此相关的错误

我认为可能是问题的原因:在第一次尝试 "serialver" 之前,我更改了项目文件夹的名称(我只是在我的文件中使用了 "Rename" Windows 中的资源管理器,它把 Intellij 中的一切都搞砸了(无论我打开什么项目,它都没有 SDK,也没有 Run/Debug 配置)。所以,我 selected "Add SDK"一个项目(或类似的东西,然后 select 从列表中编辑了一个 JRE 12。 然后我 运行 "Debug Main" 和 Run/Debug 配置自动设置。

当我转到“项目结构”>“项目设置”>“SDK”时,我只有一个 SDK:"C:\Program Files\Java\jdk-12.0.1"。

当我在项目中转到 "Run/Debug Configurations" 时,在 Application > Main 的 JRE 中,我有以下 select (但据我了解,这些都是一样的SDK,对吧?):

所以我不知道如何调整这里的任何内容?我是如何在更新的 Java 运行时版本中编译这些 classes 的?

这里的问题是我不确定是否还有其他问题,或者我之前所做的调整是否搞砸了。

class是:

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.run(URLClassLoader.java:458)
        at java.base/java.net.URLClassLoader.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 class 时出错:

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 版本。

解决方案是 adjust the target language level 以便您的代码可以 运行 在较旧的 Java 版本上或调整您的 PATH 环境以便 java from JDK 12 安装目录是第一个。或者您可以在尝试 运行 代码时在命令行中指定 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

解决