IntelliJ IDEA中的UnsupportedClassVersionError故障排除

yzuktlbb  于 2023-06-28  发布在  IntelliJ IDEA
关注(0)|答案(3)|浏览(208)

我正在学习一门Java课程,使用Intellij IDEA。在这个“测试”项目中,我只有两个测试类,如下所示(它们实际上没有任何代码)。在我进入问题之前,我只需要声明我所有的项目都能正常运行,只是我在运行终端命令时遇到了以下问题,我担心我的IDE搞砸了:
当我需要使用以下命令获取BankAccount类的串行版本时,就会出现问题:

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

我得到了下面显示的错误,我知道这些类是由一个较新的Java运行时错误编译的,但是我如何在Intellij中解决这个问题呢?在任何项目中的任何类上运行该命令时,我都会得到相同的错误。
附加说明:当我使用javacom.company.Main在终端中运行Main类时,我也得到了一个与此相关的错误
我认为可能是问题的原因:在第一次尝试“serialver”之前,我更改了一个项目文件夹的名称(我只是在Windows的文件资源管理器中使用了“重命名”,它在Intellij中搞乱了一切(无论我打开什么项目,它都没有SDK,也没有运行/调试配置)。因此,我在一个项目上选择了“AddSDK”(或类似的东西),并从列表中选择了一个JRE 12。然后我运行“Debug Main”,运行/调试配置被自动设置。
当我进入项目结构>项目设置> SDK时,我只有一个SDK:“C:\Program Files\Java\jdk-12.0.1”。
当我在一个项目中进入“运行/调试配置”时,在Application > Main的JRE中,我有以下选项可供选择(但据我所知,这些都是同一个SDK,对吗?):

  • 默认值(12 -'Test'模块的SDK)
  • 12(Java版本“12.0.1”)
  • C:\Program Files\Java\jdk-12.0.1”

所以我不知道怎么调整这里的东西?我如何能够在任何时候在较新的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
rnmwe5a2

rnmwe5a21#

在命令行中运行java -version。如果不是Java 12或更高版本,它将解释这个问题。您的目标是Java 12版本,而在旧版Java上运行它。
解决方案是使用adjust the target language level,以便您的代码可以在较旧的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
sd2nnvve

sd2nnvve2#

当我的“运行/调试配置”设置为不同版本时,我遇到了这个问题。
我更新了它们,默认为模块级别,它为我解决了这个问题。

jljoyd4f

jljoyd4f3#

通过编辑文件“idea.properties”并设置适当的JVMVersion解决

相关问题