没有线程名称的异常

时间:2014-06-09 23:01:03

标签: java multithreading

我的一个多线程应用程序在抛出异常时不包含线程名称。我得到如下的例外

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)

它是否包含线程名称?

1 个答案:

答案 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);