Progress28.ru

IT Новости


09ae9cb0
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java lang exceptionininitializererror java lang exceptionininitializererror

Java: ExceptionInInitializerError при запуске программы

При запуске моя программа сразу же бросит ExceptionInInitializerError. Источник находится от этого метода:

Я распечатал различные части строки и обнаружил, что ошибка возникает только тогда, когда я вызываю form.format(date). Там написано, что это null. Единственная проблема заключается в том, что и дата, и форма статически объявлены прямо над этим методом как таковые:

Ошибка внезапно начала выбрасываться после некоторого незначительного исправления ошибки. Я понятия не имею, что здесь не так и как вообще что-то может быть не так. Я имею в виду, что я вызываю статически объявленные переменные в том же классе. Технически, они не должны быть null, но они есть. У кого-нибудь есть идеи, почему он выбрасывает эту ошибку? Вот вывод консоли:

Кстати, A$.OpSystem.getOperatingSystem отображается там только потому, что он вызывает A$.errorMessage.

И у меня уже была эта проблема раньше, это было как раз тогда, когда статически объявленная переменная фактически никогда не объявлялась как оставшаяся null, когда она была вызвана. Теперь это не должно быть null, но это так. Так что я понятия не имею, что его вызывает. Идеи?

Но я думаю, что это хорошее время, чтобы получить образование о том, как статические переменные на самом деле загружаются.

EDIT: похоже, что никакого исключения не возникает, если я перемещаю статический объект Курсора, вызывающий ‘loadCursor’, в другой класс. Что?

Я сделал тест этой ситуации, но он не возвращает никакой ошибки?

2 Ответа

После изучения вашего исключения trace.

Становится ясно , что некоторая статическая инициализация поля в A$ выполняется до инициализации date и form и вызова loadCursor , который затем логически завершается неудачей с NullPointerException , поскольку date и form неинициализированы.

Читать еще:  Как исправить ошибку в игре

Проблема в том, что вы разместили код, который инициализирует ваш Cursor , перед тем, который инициализирует ваши объекты date и form . Статические поля с назначениями во время объявления инициализируются в порядке объявления, согласно разделу §8.3.2.1 спецификации языка Java .

Если вы прочтете подробный процесс инициализации, в частности раздел §12.4.2.9, вы найдете.

Затем выполните инициализаторы переменных класса и статические инициализаторы класса или инициализаторы полей интерфейса в текстовом порядке, как если бы они были одним блоком.

Итак, вы, вероятно, делаете что — то вроде этого:

loadCursor не должен вызываться до инициализации date и form , если вы хотите, чтобы это сработало.

Причина, по которой ваш пример не производит ‘error’ (а?) происходит потому, что ни один из методов не ссылается на еще неинициализированное поле. Если вы хотите получить эквивалентное поведение, которое никоим образом не является ошибкой, см. Следующее (которое можно увидеть здесь ):

Выход можно увидеть следующим образом.

Я думаю, вы обнаружите, что проблема возникает здесь

Возможно, вам придется сделать что-то более похожее

Или аналогично 😛

Похожие вопросы:

Я получаю ошибку при запуске программы Java без main(),но я использовал только статический блок, чтобы проверить, будет ли программа выполняться или нет main().Is есть любой другой способ выполнить.

Мне нужно знать, какая последовательность JVM следует при запуске пользовательской программы. Допустим, пользователь создал программу Runner.java и создал для нее файл jar с именем runner.jar .

В настоящее время я работаю над проектом c# wpf. Я добавил код в программу, чтобы он создавал раздел реестра для автоматического запуска программы при входе пользователя в систему, а также написал.

Я скомпилировал программу она не имеет ошибок но при запуске я получаю ошибку: не удалось найти или загрузить frame.java Я сохранил имя программы как frame.java и запустил как java frame.java import.

Читать еще:  Ошибка конфликт ip адресов

Я делал некоторые тесты с этой страницы: http://scjptest.com/mock-test.xhtml?исполнение=e7s1 и возник вопрос What is the result when this program is executed?. Вот код: public class SuperHotel <.

Есть ли какая-нибудь команда или что-то подобное, чтобы узнать имя JIT, используемое при запуске программы java?

Когда я определяю статические или постоянные члены, например: public static final Font BIG_FONT = new Font(, Font.BOLD, 18); Я заметил, что они загружаются только тогда, когда я их впервые.

Я пишу библиотеку для Java, в которой есть несколько файлов, которые нужно записать при запуске программы (если они еще не существуют). Однако большинство библиотек не включают метод ‘main’.

Ссылка на основную публикацию