簡體   English   中英

IntelliJ 錯誤:java:java.lang.ExceptionInInitializerError

[英]IntelliJ Error:java: java.lang.ExceptionInInitializerError

每次我在 IntelliJ 中遇到這個異常時,我都會簡單地修復它,然后很容易忘記修復。

代碼:

package whatever;
import org.junit.Test;
public class TestClass
{
    @Test
    void test() {}
}

設想:

  • 添加新的TestClass
  • 右鍵單擊TestClass類。
  • Select "Run 'TestClass'" 運行測試用例。

“消息生成”窗格顯示:

Information:javac 9-ea was used to compile java sources
Information:Module "dummy" was fully rebuilt due to project configuration/dependencies changes
Information:8/16/17 11:35 PM - Compilation completed with 1 error and 0 warnings in 1s 663ms
Error:java: java.lang.ExceptionInInitializerError

go 可能有什么錯誤?

在這個簡單的場景中可能會出現什么問題?

IntelliJ:社區 2017.1 (idea-IC-171.4424.56)

為了解決這個問題,我這樣做:

  • 文件 -> 項目結構... -> 項目設置/項目 -> 項目 SDK。
  • 從“9-ea”更改為“1.8”。

詳情

顯然,問題在於所選 JDK-s 的構建(java 9)和運行(java 8)存在差異。

我不確定如何在同一項目中重新選擇“9-ea”——IntelliJ 本身既沒有在“9-ea”JRE 中運行(根據 Help -> About),也沒有將JAVA_HOME env var 設置為它其他可能的設置(如 Maven -> Runner)建議任何“9-ea”。

我也沒有設法在它被編譯的同一個 JDK (java 9) 下運行測試。 但是,不清楚 JDK 測試是在什么環境下運行的,因為 IntelliJ 僅報告有關 JDK 的編譯。

如果您使用 Lombok:對我來說,這是在 pom.xml 中為我的 maven lombok 依賴項設置最新版本的解決方案。

   *<dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
        <version>1.18.8</version>
    </dependency>*

一旦我在我的機器上安裝了 Java 11,我就開始看到這個異常。 JAVA_HOME默認指向 Java 11,而我的項目仍在 Java 8 中。將JAVA_HOME更改為 Java 8 jdk 為我解決了這個問題。

如果您有多個項目,每個項目都在不同的 JDK 上運行,請使用此命令臨時更改每個命令的 Java 版本。

JAVA_HOME=/path/to/JVM/jdk/Home mvn clean install

當我嘗試在 IntelliJ-2019.2 版本中運行我的應用程序時,我遇到了同樣的錯誤。 以下是我為解決此問題而遵循的步驟。

版本:

IntelliJ : IDEA-IntelliJ-2019.2

Java:jdk1.8_221

  1. 轉到 IntelliJ 中的以下路徑

文件 -> 項目結構 -> 項目 -> 項目 SDK ->(選擇您要使用的 java 版本)

(在我的情況下,選擇了“項目 SDK”java-11,我將其更改為“java8”)

  1. 單擊“應用”,然后單擊“確定”。

在此處輸入圖片說明

在此處輸入圖片說明

我覺得我遇到了這個問題,因為 IntelliJ 試圖使用內置的 java-11 編譯我的 java 類,而我的 java 類是建立在 java-8 上的。 所以當我在 IntelliJ 中明確配置 java-8 時,它起作用了!! 希望這會有所幫助。

如果您最近更新了 IDE,則可以嘗試這些步驟。

  1. 刪除idea項目/工作區的.idea目錄
  2. 然后轉到文件-> 使緩存無效/重新啟動...
  3. 重新啟動 Idea 后,重新添加/導入您的模塊

我遇到了與JAR s 和Jena類似的問題(從 IntelliJ 運行時它有效)。
我在我的項目中使用Apache Jena v4.0.0並構建了一個 JAR(主 class 用於 JAR 作為控制台應用程序)。
JAR 使用 IntelliJ 成功構建,但運行時拋出java.lang.ExceptionInInitializerError... Caused by: java.lang.NullPointerException NPE 提示某些內容未正確初始化。
使用先前版本Jena 3.17.0構建的 jar 完美運行。

我做了什么來修復它
我打開了兩個 JARs,比較了它們的META-INF文件夾並遇到了差異

my.jar\META-INF\services\org.apache.jena.sys.JenaSubsystemLifecycle

新版本(jena v4.0.0)只包含一行:

org.apache.jena.tdb.sys.InitTDB

舊版本 (jena v3.17.0) 包含兩個不同的行:

org.apache.jena.riot.system.InitRIOT
org.apache.jena.sparql.system.InitARQ

我已經將舊的兩行添加到文件中,並用它重新打包了新的 JAR:

org.apache.jena.tdb.sys.InitTDB
org.apache.jena.riot.system.InitRIOT
org.apache.jena.sparql.system.InitARQ

它解決了我的問題。
更新:最近的Jena v4.4.0構建了相同的“錯誤”。
我不是專家,可能有比手動修補 JAR 更好的方法。
但我仍然希望這個解決方案能幫助像我這樣的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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