我设置了全局异常处理程序:
Thread.setDefaultUncaughtExceptionHandler(new DefaultUncaughtExceptionHandler());
实现非常简单:
public class DefaultUncaughtExceptionHandler implements UncaughtExceptionHandler {
public static final Logger logger = LoggerFactory.getLogger(DefaultUncaughtExceptionHandler.class);
@Override
public void uncaughtException(Thread t, Throwable e) {
logger.error("Uncaught Exception detected in thread {}", t, e);
}
}
有时我会多次在日志中看到这个例外:
[AWT-EventQueue-0] DefaultUncaughtExceptionHandler - Uncaught Exception detected in thread Thread[AWT-EventQueue-0,6,main]
java.lang.ArrayIndexOutOfBoundsException: null
但我无法找到它的来源。
你怎么看,为什么stacktrace是空的?它不应该是空的,所有线程必须至少从父母" main"线程或任何其他。
答案 0 :(得分:3)
JIT编译器可以进行一些优化并且"丢失"堆栈痕迹。
您可以使用以下JVM标志来禁用此优化:
-XX:-OmitStackTraceInFastThrow