При запуске моя программа сразу выдает ошибку ExceptionInInitializerError. Источник из этого метода:
public static void errorMessage(String input) {
System.err.println("[ERROR] " + form.format(date) + " - " + Thread.currentThread().getStackTrace()[3].getClassName() + ": " + input);
}
Я распечатал разные части строки и обнаружил, что ошибка возникает только тогда, когда я вызываю form.format (date ). Он говорит, что это ноль. Единственная проблема заключается в том, что и дата, и форма статически объявляются прямо над этим методом:
public static Date date = new Date();
public static DateFormat form = new SimpleDateFormat("HH:mm:ss");
Ошибка внезапно начала выдаваться после исправления незначительной ошибки. Я понятия не имею, что не так или как что-то может быть не так с этим. Я имею в виду, что я вызываю статически объявленные переменные в том же классе. Технически они не должны быть нулевыми, но они есть. У кого-нибудь есть идеи, почему он выдает эту ошибку? Вот вывод консоли:
java.lang.ExceptionInInitializerError
at A$$OpSystem.getOperatingSystem(A$.java:98)
at A_.<clinit>(A_.java:19)
Caused by: java.lang.NullPointerException
at A$.errorMessage(A$.java:72)
at A$.loadCursor(A$.java:84)
at A$.<clinit>(A$.java:62)
... 2 more
Exception in thread "main"
Кстати, A$.OpSystem.getOperatingSystem отображается там только потому, что вызывает A$.errorMessage...
И у меня была эта проблема раньше, это было просто, когда статически объявленная переменная фактически никогда не объявлялась и оставалась нулевой при ее вызове. Теперь он не должен быть нулевым, но это так. Поэтому я понятия не имею, что вызывает это. Идеи?
Но я думаю, сейчас самое время узнать, как на самом деле загружаются статические переменные...
РЕДАКТИРОВАТЬ :Кажется, что исключение не возникает, если я перемещаю статический объект Cursor, вызывающий 'loadCursor', в другой класс. Какая?
Я проверил эту ситуацию, но она не возвращает ошибок?
public class StaticMethodTesting {
public static int i = getInt();
public static int getInt() {
return getAnotherInt();
}
public static int getAnotherInt() {
return 0;
}
public static void main(String[]args) {
System.out.println("Hi");
}
}