启动时,我的程序立即抛出 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...
我之前也遇到过这个问题,只是当一个静态声明的变量实际上从未被声明为在调用时保持为空。现在它不应该为空,但它是。所以我不知道是什么原因造成的。想法?
但我想这是了解静态变量如何实际加载的好时机......
编辑:如果我将调用“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");
}
}