Error java java lang exceptionininitializererror

Я столкнулся с некоторыми проблемами при попытке загрузить Intellij (окончательный) с JDK 10.0.1 и "spring-boot-starter-test". Если я запускаю основной метод, независимо от его содержимого и независимо от того, есть ли у меня какие-либо активные тесты, я всегда получаю "Ошибка: java: java.lang.ExceptionInInitializerError" после компиляции перед запуском.

Подводя итоги, это вызывает ошибку

Теперь я предполагаю, что это связано с тем, что тест весны не совместим с JDK 10, хотя я склонен задавать любые идеи о том, как решить это?

Обновление 2 Чтобы быть ясным, это ТОЛЬКО вывод, который я получаю от Intellij

При создании экземпляра класса App в main класса Main в коде ниже возникает следующая ошибка:

До этого читал аналогичный вопрос на иноязычном StackOverflow, но приведенные там методы решения не помогли.

1 ответ 1

ExceptionInInitializerError это ошибка, которая возникает когда во время статической инициализации класса выбрасывается исключение.

Signals that an unexpected exception has occurred in a static initializer. . Сообщает о том, что неожиданная ошибка возникла в статическом инициализаторе. .

Например, если в классе есть такое поле:

, то при первом обращении к классу виртуальная машина попытается его инициализировать. При этом возникнет NullPointerException , но это исключение будет обернуто в ExceptionInInitializerError т.к. неинициализированный класс достаточно серьезная проблема, которую разработчику сложно будет обработать и исправить (предназначение Error ).

Пути исправления.

Для исправления ошибки нужно найти оригинальное исключение. Возможные варианты:

Избавиться от статической инициализации. Если поля не используются в нескольких разных объектах, то их не нужно делать статическими. Попробуйте убрать static из объявления поля и использующих его методов и посмотрите что получится.

Ошибки, возникшие при инициализации полей класса уже не будут оборачиваться в Error и Вы сможете увидеть оригинальное исключение.
В Вашем случае это, скорее всего, java.lang.IllegalStateException: Toolkit not initialized по причине того, что элементы создаются до инициализации платформы. Посмотрите аналогичный вопрос на английском: JavaFX issue with static keyword; with Minimal, Complete, and Verifiable example

Читайте также:  Kext dev mode 1

Просмотреть до конца трассировку стека по ошибке. Метод getCause() возвращает оригинальное исключение и обычно это исключение включается в вывод по ошибке. Для примера выше выводится:

Поймать ошибку. Можно повесить обработчик ошибок на уровне потока и обработать его вручную.

Обрабатывать ошибки при инициализации. Перенести инициализацию переменных в методы, либо блоки и обрабатывать ошибки самому.

После того как найдете оригинальное исключение его нужно будет как-то обрабатывать и/или устранять. Но это уже совсем другая история.

Every time I encounter this exception in IntelliJ, I fix it trivially and forget the fix easily.

  • Add new TestClass .
  • Right-click TestClass .
  • Select "Run ‘TestClass’" to run test cases.

The "Messages Build" pane shows:

What can possibly go wrong?

What are the likely issues in this simple scenario?

IntelliJ: COMMUNITY 2017.1 (idea-IC-171.4424.56)

5 Answers 5

To fix the issue, I do:

  • File -> Project Structure. -> Project Settings / Project -> Project SDK.
  • Change from "9-ea" to "1.8".

DETAILS

Apparently, the issue is discrepancies in selected JDK-s to build (java 9) and run (java 8).

I’m not sure how "9-ea" gets re-selected there for the same project — neither IntelliJ itself runs in "9-ea" JRE (according to Help -> About) nor JAVA_HOME env var is set to it nor other possible settings (like Maven -> Runner) suggest any "9-ea".

I also didn’t manage to run the test under the same JDK (java 9) which it gets compiled under. However, it’s unclear what JDK tests are run under because IntelliJ reports only about JDK for compilation.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *