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

При запуске моя программа сразу выдает ошибку 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");
}
}
6
задан Dave Newton 1 January 2013 в 20:56
поделиться