Когда Java выдает ошибку ExceptionInInitializerError?
В этом кратком руководстве мы увидим, что заставляет Java создавать экземпляр исключения ExceptionInInitializerError .
Начнем с небольшого количества теории. Затем мы увидим несколько примеров этого исключения на практике.
2. Ошибка ExceptionInInitializer
ExceptionInInitializerError указывает , что в статическом инициализаторе возникло непредвиденное исключение . По сути, когда мы видим это исключение, мы должны знать, что Java не удалось оценить блок статического инициализатора или создать экземпляр статической переменной.
Фактически каждый раз, когда внутри статического инициализатора возникает какое-либо исключение, Java автоматически заключает это исключение в экземпляр класса ExceptionInInitializerError . Таким образом, он также поддерживает ссылку на фактическое исключение как на основную причину.
Теперь, когда мы знаем причину этого исключения, давайте посмотрим на это на практике.
3. Статический блок инициализатора
Чтобы инициализатор статического блока вышел из строя, мы намеренно разделим целое число на ноль:
public class StaticBlock private static int state; static state = 42 / 0; > >
Теперь, если мы вызовем инициализацию класса чем-то вроде:
new StaticBlock();
Java lang exceptionininitializererror как исправить
Сигналы, что неожиданное исключение произошло в статическом инициализаторе. ExceptionInInitializerError бросается, чтобы указать, что исключение произошло во время оценки статического инициализатора или инициализатора для статической переменной. С выпуска 1.4 это исключение было retrofitted, чтобы соответствовать объединяющему в цепочку исключение механизму общего назначения. «Сохраненный объект throwable» это может быть обеспечено во время создания и получено доступ через getException() метод теперь известен как причина, и может быть получен доступ через Throwable.getCause() метод, так же как вышеупомянутый «метод наследства.»
Сводка конструктора
Конструкции ExceptionInInitializerError с null как его строка сообщения детали и без сохраненного объекта throwable.
Создает ExceptionInInitializerError с указанной строкой сообщения детали.
Создает новое ExceptionInInitializerError класс, сохраняя ссылку на Throwable объект, брошенный для более позднего извлечения getException() метод.
Сводка метода
| Модификатор и Тип | Метод и Описание |
|---|---|
| Throwable | getCause() |
Возвращает причину этой ошибки (исключение, которое произошло во время статической инициализации, которая заставила эту ошибку создаваться).
Возвращает исключение, которое произошло во время статической инициализации, которая заставила эту ошибку создаваться.
Методы java.lang унаследованный от класса. Throwable
Методы java.lang унаследованный от класса. Объект
Деталь конструктора
ExceptionInInitializerError
public ExceptionInInitializerError()
Конструкции ExceptionInInitializerError с null как его строка сообщения детали и без сохраненного объекта throwable. Сообщением детали является Строка, которая описывает это определенное исключение.
ExceptionInInitializerError
public ExceptionInInitializerError(Throwable thrown)
Создает новое ExceptionInInitializerError класс, сохраняя ссылку на Throwable объект, брошенный для более позднего извлечения getException() метод. Строка сообщения детали устанавливается в null .
ExceptionInInitializerError
Создает ExceptionInInitializerError с указанной строкой сообщения детали. Сообщением детали является Строка, которая описывает это определенное исключение. Строка сообщения детали сохраняется для более позднего извлечения Throwable.getMessage() метод. Есть не сохраненный объект throwable.
Деталь метода
getException
public Throwable getException()
Возвращает исключение, которое произошло во время статической инициализации, которая заставила эту ошибку создаваться. Этот метод предшествует средству объединения в цепочку исключения общего назначения. Throwable.getCause() метод является теперь привилегированными средствами получения этой информации.
getCause
public Throwable getCause()
Возвращает причину этой ошибки (исключение, которое произошло во время статической инициализации, которая заставила эту ошибку создаваться).
Платформа Java™
Стандарт Эд. 7
Представьте ошибку или функцию
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE . Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.
При запуске jar-файла получаю ошибку java.lang.ExceptionInInitializerError Caused by: java.util.MissingResourceException

Мне нужно использовать локализацию в моем проекте, вот его структура. С помощью Maven я собираю два jar файла — сервер и клиентскую часть вот так.
4.0.0 UTF-8 1.8 1.8 com.itmo Lab8 1.0 org.jdom jdom2 2.0.5 ch.qos.logback logback-core 1.3.0-alpha5 ch.qos.logback logback-classic 1.3.0-alpha5 ch.qos.logback logback-access 1.3.0-alpha5 org.projectlombok lombok 1.16.4 provided org.postgresql postgresql 42.2.14 com.jcraft jsch 0.1.55 org.junit.jupiter junit-jupiter RELEASE test commons-io commons-io 2.6 maven-assembly-plugin server-main package single server-main jar-with-dependencies true com.itmo.server.ServerMain client-main package single client-main jar-with-dependencies true com.itmo.client.MainConsole
Когда я запускаю из Идеи всё работает. Однако при запуске джарников появляется ошибка.
Exception in thread "main" java.lang.ExceptionInInitializerError Caused by: java.util.MissingResourceException: Can't find bundle for base name locals, locale ru at java.util.ResourceBundle.throwMissingResourceException(Unknown Source) at java.util.ResourceBundle.getBundleImpl(Unknown Source) at java.util.ResourceBundle.getBundle(Unknown Source) at com.itmo.utils.LocaleClass.(LocaleClass.java:14) at com.itmo.server.ServerMain.(ServerMain.java:11)
Я использую данный класс при работе с локалями.
import lombok.Getter; import java.util.Locale; import java.util.ResourceBundle; public class LocaleClass < @Getter public ResourceBundle resourceBundle; public LocaleClass()< resourceBundle = ResourceBundle .getBundle("locals", Locale.forLanguageTag("RU"), new UTF8Control()); >public LocaleClass(ResourceBundle resourceBundle) < this.resourceBundle = resourceBundle; >public void changeLocale(Locale locale) < resourceBundle = ResourceBundle .getBundle("locals", locale, new UTF8Control()); >public enum SupportedLanguages < RU, EST, SPA, SWE >public void changeLocaleByTag(String TAG) < changeLocale(Locale.forLanguageTag(TAG)); >public void changeLocaleByTag(SupportedLanguages TAG) < changeLocale(Locale.forLanguageTag(TAG.toString())); >public String getString(String text) < return resourceBundle.getString(text); >>

Я не очень хорошо понимаю, что происходит, почему не находит мои локали и как это исправить, хоть и гуглил. UPD: добавил дерево каталогов jar
как устранить java.lang.exceptionininitializererror
![]()
JAVAx64 — http://yadi.sk/d/zt6aPbEAHLrmG Надеюсь помог, сам час сидел не мог найти решение потому, что в интернете нет русских роликов по решению этой проблемы, да и вообще я таких роликов не видел! подпишитесь на мой LIVE и основной канал — http://www.youtube.com/channel/UCTBVXc3WCERC-A1r6hD6trg
Показать больше
Войдите , чтобы оставлять комментарии