我的一个多线程应用程序在抛出异常时不包含线程名称。我得到如下的例外
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at dataimporter.Importer.run(Importer.java:201)
at java.lang.Thread.run(Unknown Source)
它是否包含线程名称?
答案 0 :(得分:4)
您可以在UncaughtExceptionHandler
注册Thread
并打印出所需信息。
Thread thread = new Thread(..);
thread.setUncaughtExceptionHandler((t, ex) -> // fancy Java 8 syntax
System.out.println(t.getName() + " " + ex)
); // or print the stack trace after it
thread.start();
以上有一些Java 8语法。如果你不使用它,你可以简单地使用一个匿名类。
UncaughtExceptionHandler handler = new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable ex) {
System.out.println(t.getName() + " " + ex);
}
};
thread.setUncaughtExceptionHandler(handler);