Elettracompany.com

Компьютерный справочник
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.

Я делал некоторые тесты с этой страницы: 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’.

Проект а зависит от проекта В. На время компиляции, все OK. При отладке, когда вызывается статическая функция из класса bClass проекта B, я получаю NoClassDefFoundError . На бегу, я получаю.

Ошибка java.lang.nullpointerexception, как исправить?

Ряд пользователей (да и разработчиков) программных продуктов на языке Java могут столкнуться с ошибкой java.lang.nullpointerexception (сокращённо NPE), при возникновении которой запущенная программа прекращает свою работу. Обычно это связано с некорректно написанным телом какой-либо программы на Java, требуя от разработчиков соответствующих действий для исправления проблемы. В этом материале я расскажу, что это за ошибка, какова её специфика, а также поясню, как исправить ошибку java.lang.nullpointerexception.

Скриншот ошибки NPE

Что это за ошибка java.lang.nullpointerexception

Появление данной ошибки знаменует собой ситуацию, при которой разработчик программы пытается вызвать метод по нулевой ссылке на объект. В тексте сообщения об ошибке система обычно указывает stack trace и номер строки, в которой возникла ошибка, по которым проблему будет легко отследить.

Читать еще:  Функция return в javascript

Что в отношении обычных пользователей, то появление ошибки java.lang.nullpointerexception у вас на ПК сигнализирует, что у вас что-то не так с функционалом пакетом Java на вашем компьютере, или что программа (или онлайн-приложение), работающие на Java, функционируют не совсем корректно. Если у вас возникает проблема, при которой Java апплет не загружен, рекомендую изучить материал по ссылке.

Ошибка Java

Как исправить ошибку java.lang.nullpointerexception

Как избавиться от ошибки java.lang.nullpointerexception? Способы борьбы с проблемой можно разделить на две основные группы – для пользователей и для разработчиков.

Для пользователей

Если вы встретились с данной ошибкой во время запуска (или работы) какой-либо программы (особенно это касается java.lang.nullpointerexception minecraft), то рекомендую выполнить следующее:

  1. Переустановите пакет Java на своём компьютере. Скачать пакет можно, к примеру, вот отсюда;
  2. Переустановите саму проблемную программу (или удалите проблемное обновление, если ошибка начала появляться после такового);
  3. Напишите письмо в техническую поддержку программы (или ресурса) с подробным описанием проблемы и ждите ответа, возможно, разработчики скоро пофиксят баг.
  4. Также, в случае проблем в работе игры Майнкрафт, некоторым пользователям помогло создание новой учётной записи с административными правами, и запуск игры от её имени.

Java ошибка в Майнкрафт

Для разработчиков

Разработчикам стоит обратить внимание на следующее:

  1. Вызывайте методы equals(), а также equalsIgnoreCase() в известной строке литерала, и избегайте вызова данных методов у неизвестного объекта;
  2. Вместо toString() используйте valueOf() в ситуации, когда результат равнозначен;
  3. Применяйте null-безопасные библиотеки и методы;
  4. Старайтесь избегать возвращения null из метода, лучше возвращайте пустую коллекцию;
  5. Применяйте аннотации @Nullable и @NotNull;
  6. Не нужно лишней автоупаковки и автораспаковки в создаваемом вами коде, что приводит к созданию ненужных временных объектов;
  7. Регламентируйте границы на уровне СУБД;
  8. Правильно объявляйте соглашения о кодировании и выполняйте их.

Как исправить ошибку java.lang.NoClassDefFoundError в Java J2EE

Я потратил довольно много времени, чтобы выяснить как исправить ошибку java.lang.NoClassDefFoundError в Java.

В этой инструкции я покажу как исправить эти ошибки, раскрою некоторые секреты NoClassDefFoundError и поделюсь своим опытом в этой области.

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

Разбираемся с причинами noclassdeffounderror в Java

NoClassDefFoundError в Java возникает, когда виртуальная машина Java не может найти определенный класс во время выполнения, который был доступен во время компиляции.

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

Важно понимать, что это отличается от ClassNotFoundException, который появляется при попытке загрузить класс только во время выполнения, а имя было предоставлено во время выполнения, а не во время компиляции. Многие Java-разработчики смешивают эти две ошибки и запутываются.

NoClassDefFoundError возникнет, если класс присутствовал во время компиляции, но не был доступен в java classpath во время выполнения. Обычно появляется такая ошибка:

Разница между java.lang.NoClassDefFoundError и ClassNotFoundException в Java

java.lang.ClassNotFoundException и java.lang.NoClassDefFoundError оба связаны с Java Classpath, и они полностью отличаются друг от друга.

ClassNotFoundException возникает, когда JVM пытается загрузить класс во время выполнения, т.е. вы даете имя класса во время выполнения, а затем JVM пытается загрузить его, и если этот класс не найден, он генерирует исключение java.lang.ClassNotFoundException.

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

Приступим к решению ошибки java.lang.NoClassDefFoundError.

Нам нужно добавить NoClassDefFoundError в Classpath или проверить, почему он не доступен в Classpath. Там может быть несколько причин, таких как:

  1. Класс недоступен в Java Classpath.
  2. Возможно, вы запускаете вашу программу с помощью jar, а класс не определен в атрибуте ClassPath.
  3. Любой сценарий запуска переопределяет переменную среды Classpath.
    Поскольку NoClassDefFoundError является подклассом java.lang.LinkageError, он также может появиться, если библиотека может быть недоступна.
  4. Проверьте наличие java.lang.ExceptionInInitializerError в файле журнала. NoClassDefFoundError из-за сбоя инициализации встречается довольно часто.
  5. Если вы работаете в среде J2EE, то видимость Class среди нескольких Classloader также может вызвать java.lang.NoClassDefFoundError.

Примеры

  1. Простой пример NoClassDefFoundError — класс принадлежит отсутствующему файлу JAR, или JAR не был добавлен в путь к классам, или имя jar было изменено кем-то.
  2. Класс не находится в Classpath, нет способа узнать это, но вы можете просто посмотреть в System.getproperty («java.classpath»), и он напечатает classpath оттуда, где можно получить представление о фактическом пути к классам во время выполнения.
  3. Просто попробуйте запустить явно -classpath с тем классом, который, по вашему мнению, будет работать, и если он работает, это верный признак того — что-то переопределяет java classpath.

NoClassDefFoundError в Java из-за исключения в блоке инициализатора

Это еще одна распространенная причина java.lang.NoClassDefFoundError, когда ваш класс выполняет некоторую инициализацию в статическом блоке и если статический блок генерирует исключение, класс, который ссылается на этот класс, получит NoclassDefFoundError.

Смотрите в журнале java.lang.ExceptionInInitializerError, потому что это может вызвать java.lang.NoClassDefFoundError: Could not initialize class.

Читать еще:  Виртуальные функции java

Как и в следующем примере кода, во время загрузки и инициализации класса, пользовательский класс генерирует Exception из статического блока инициализатора, который вызывает ExceptionInInitializerError при первой загрузке пользовательского класса в ответ на новый вызов User ().

Exception in thread «main» java.lang.ExceptionInInitializerError in Java Program

JVM throws java.lang.ExceptionInInitializerError , when there is an Exception inside static initializer block. If you know about static variable in Java, then you may know that they are initialized at the time of class loading. If there is an Exception during that initialization of static variables, you will see ExceptionInInitializerError in Java. This could be any exception e.g. java.lang.ArrayIndexOutOfBound or java.lang.NullPointerException . Java developers often confused with this error because, they think that they have not defined any static initializer block, then how come they are getting ExceptionInInitializerError; well, by default Java combines all static variable initialization inside a static initializer block and initialize them in the order they are declared in source file.

If suppose a variable ABC is declared at line 1, used at line 2 but initialized at line 3, then code at line 2 will throw java.lang.NullPointerException , which will be wrapped by JVM in ExceptionInInitializerError , and if that code happens to be executed by main thread then you will see «Exception in thread «main» java.lang.ExceptionInInitializerError» in your console or log file.

In a large application with huge log files sometime this error got unnoticed, and programmers get alerted by dreaded java.lang.NoClassDefFoundError. Unfortunately this error comes when client class tries to use the class, which was not loaded because of ExceptionInInitializerError . Since class loading was failed earlier, JVM is now throwing NoClassDefFoundError .

Sometimes this misleads Java developer, and they start looking at classpath, path and java.library.path for missing class, and confused them with hell not finding any anomalies. If you are investigating cause of NoClassDefFoundError, it’s always a better idea to check your application log files for ExceptionInInitializerError before looking at CLASSPATH .

In this article, we will see an example code, which generates exception during static initialization and results in «Exception in thread «main» java.lang.ExceptionInInitializerError» . In later part, we will see how to fix this error.

Cause of «Exception in thread «main» java.lang.ExceptionInInitializerError»

As with any other error or exception, by first looking at this line, you know that exception is java.lang.ExceptionInInitializerError , which comes because of failure during class loading and static initialization. Since it has occurred inside Main thread, which is responsible for starting application, it’s better to start your investigation from Main class, the class which you provided to java command at command line or same class where you have written your public static void main(String args[]) method. Now if you look at full stacktrace carefully, you don’t need to do anything because JVM prints name of the class, which caused ExceptionInInitializerError . It’s also a subclass of LinkageError , which means if this error has occurred then you class will not be loaded into JVM memory. Now let’s take a look at our example program, which upon execution, throwing following error :

By looking at this stack trace, we know that actual error is java.lang.IndexOutOfBoundsException , which came at line 12 of StaticInitiazerDemo class. It came because of call to get() method of ArrayList with index 0 and come because size of ArrayList was also zero (Index: 0, Size: 0 part of stack-trace). Now by following this information, you know that our List is empty, when we try to get first CreditCard from this list.

Here is class hierarchy of all Error class in Java. You can see that ExceptionInInitializerError inherit from LinkageError. Its also worth knowing that like RuntimeException, Errors are also unchecked and compiler doesn’t check for mandatory error handling code.

Things to remember:

1) Remember «Exception in thread «main» java.lang.ExceptionInInitializerError» means Exception has occurred in main thread, and it is java.lang.ExceptionInInitializerError , which is sub-class of LinkageError and comes when JVM tries to load a class and it failed because of any RuntimeException in static initializer block e.g. IndexOutOfBoundsException or NullPointerException.

2) Remember that JVM combines all static variable initialization into one static initializer block in the order they appear in source file. So, don’t think that absence of explicit static initializer block will not cause this error. In fact, you must ensure correct order of static variables i.e. if one variable initialization uses another variable then make sure that is initialized first.

3) Down the line, java.lang.ExceptionInInitializerError can cause ClassNotFoundException or NoClassDefFoundError, if some other code tries to use the class, which caused ExceptionInInitializerError . Why? because loading of that class is failed and it’s not available inside JVM memory. So always check your log files for this before even if you are looking to solve any problem related to class not found.

Читать еще:  Javascript serialize array

4) Remember Static initializer block can throw RuntimeException but not checked Exception, because later required mandatory catch block for handling.

Встроенные исключения в Java с примерами

Встроенные исключения — это исключения, доступные в библиотеках Java. Эти исключения подходят для объяснения определенных ошибок. Ниже приведен список важных встроенных исключений в Java.
Примеры встроенных исключений:

    Арифметическое исключение: оно генерируется, когда в арифметической операции возникло исключительное условие.

// Java-программа для демонстрации
// ArithmeticException

public static void main(String args[])

int a = 30 , b = 0 ;

int c = a / b; // нельзя делить на ноль

System.out.println( «Result = » + c);

catch (ArithmeticException e) <

System.out.println( «Can’t divide a number by 0» );

Выход:

ArrayIndexOutOfBounds Исключение: выдается для указания на доступ к массиву с недопустимым индексом. Индекс либо отрицательный, либо больше или равен размеру массива.

// Java-программа для демонстрации
// ArrayIndexOutOfBoundException

public static void main(String args[])

int a[] = new int [ 5 ];

a[ 6 ] = 9 ; // доступ к 7-му элементу в массиве

catch (ArrayIndexOutOfBoundsException e) <

System.out.println( «Array Index is Out Of Bounds» );

Выход:

ClassNotFoundException: это исключение возникает, когда мы пытаемся получить доступ к классу, определение которого не найдено.

// Java-программа для иллюстрации
// концепция ClassNotFoundException

public static void main(String[] args)

Object o = class .forName(args[ 0 ]).newInstance();

System.out.println( «Class created for» + o.getClass().getName());

Выход:

FileNotFoundException: это исключение возникает, когда файл недоступен или не открывается.

// Java-программа для демонстрации
// FileNotFoundException

public static void main(String args[])

// Следующий файл не существует

File file = new File( «E:// file.txt» );

FileReader fr = new FileReader(file);

catch (FileNotFoundException e) <

System.out.println( «File does not exist» );

Выход:

IOException: это бросается, когда операция ввода-вывода потерпела неудачу или прервалась

// Java-программа для иллюстрации IOException

public static void main(String args[])

FileInputStream f = null ;

f = new FileInputStream( «abc.txt» );

while ((i = f.read()) != — 1 ) <

System.out.print(( char )i);

Выход:

InterruptedException: он генерируется, когда поток ожидает, спит или выполняет некоторую обработку, и прерывается.

// Java-программа для иллюстрации
// InterruptedException

public static void main(String args[])

Thread t = new Thread();

Выход:

NoSuchMethodException: t выбрасывается при доступе к методу, который не найден.

// Java-программа для иллюстрации
// NoSuchMethodException

i = Class.forName( «java.lang.String» );

Class[] p = new Class[ 5 ];

catch (SecurityException e) <

catch (NoSuchMethodException e) <

catch (ClassNotFoundException e) <

public static void main(String[] args)

Выход:

NullPointerException: это исключение возникает при обращении к членам нулевого объекта. Null ничего не представляет

// Java-программа для демонстрации NullPointerException

public static void main(String args[])

String a = null ; // нулевое значение

catch (NullPointerException e) <

Выход:

NumberFormatException: это исключение возникает, когда метод не может преобразовать строку в числовой формат.

// Java-программа для демонстрации
// NumberFormatException

public static void main(String args[])

int num = Integer.parseInt( «akki» );

catch (NumberFormatException e) <

System.out.println( «Number format exception» );

Выход:

StringIndexOutOfBoundsException: он вызывается методами класса String, чтобы указать, что индекс либо отрицателен, чем размер строки.

// Java-программа для демонстрации
// StringIndexOutOfBoundsException

public static void main(String args[])

String a = «This is like chipping » ; // длина 22

char c = a.charAt( 24 ); // доступ к 25-му элементу

catch (StringIndexOutOfBoundsException e) <

Выход:

Некоторые другие важные исключения

    ClassCastException

// Java-программа для иллюстрации
// ClassCastException

public static void main(String[] args)

String s = new String( «Geeks» );

Object o = (Object)s;

Object o1 = new Object();

String s1 = (String)o1;

StackOverflowError

// Java-программа для иллюстрации
// StackOverflowError

public static void main(String[] args)

public static void m1()

public static void m2()

NoClassDefFoundError

// Java-программа для иллюстрации
// NoClassDefFoundError

public static void main(String[] args)

System.out.println( «HELLO GEEKS» );

ExceptionInInitializerError
Код 1:

// Java-программа для иллюстрации
// ExceptionInInitializerError

static int x = 10 / 0 ;

public static void main(String[] args)

Код 2:

// Java-программа для иллюстрации
// ExceptionInInitializerError

public static void main(String[] args)

Объяснение: Вышеуказанное исключение возникает всякий раз, когда выполняется статическое присвоение переменной и статический блок, если возникает какое-либо исключение.

IllegalArgumentException

// Java-программа для иллюстрации
// IllegalArgumentException

public static void main(String[] args)

Thread t = new Thread();

Thread t1 = new Thread();

t.setPriority( 7 ); // Верный

t1.setPriority( 17 ); // Исключение

Объяснение: Исключение возникает явно либо программистом, либо разработчиком API, чтобы указать, что метод был вызван с недопустимым аргументом.

IllegalArgumentException

// Java-программа для иллюстрации
// IllegalStateException

public static void main(String[] args)

Thread t = new Thread();

Объяснение: Вышеуказанное исключение явно возникает либо программистом, либо разработчиком API, чтобы указать, что метод был вызван в неправильное время.

AssertionError

// Java-программа для иллюстрации
// AssertionError

public static void main(String[] args)

// Если х не больше или равно 10

// тогда мы получим исключение во время выполнения

Объяснение: Вышеуказанное исключение явно вызывается программистом или разработчиком API, чтобы указать, что утверждение assert не выполнено.

Эта статья предоставлена Бишал Кумар Дубей . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Ссылка на основную публикацию
ВсеИнструменты 220 Вольт
Adblock
detector