簡體   English   中英

IntelliJ IDEA 中的 UnsupportedClassVersionError 故障排除

[英]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,對吧?):

  • 默認(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

在命令行中運行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM