大可制作:QQ群:31564239(asp|jsp|php|mysql)

Java Gossip: UncaughtExceptionHandler

在J2SE 5.0之前,如果您想要统一处理某些线程的unchecked异常,您可以使用一个ThreadGroup来管理,您继承ThreadGroup,并重 新定义其uncaughtException()方法,而在J2SE 5.0之后,您不用这么麻烦,您可以让您的异常处理类实现Thread.UncaughtExceptionHandler,并实现其 uncaughtException()方法,例如:
  • ThreadExceptionHandler.java
package onlyfun.caterpillar;

public class ThreadExceptionHandler
implements Thread.UncaughtExceptionHandler {
public void uncaughtException(Thread t, Throwable e) {
System.out.println(t.getName());
e.printStackTrace();
}
}

您可以使用Thread的setUncaughtExceptionHandler()方法来设定异常处理对象,例如:
  • ThreadExceptionDemo.java
package onlyfun.caterpillar;

public class ThreadExceptionDemo {
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() {
public void run() {
// 除 0 的错误
int n = 1/0;
}
}, "testThread");

thread.setUncaughtExceptionHandler(
new ThreadExceptionHandler());
thread.start();
}
}

在这个程序中,我们故意产生除零的异常,异常丢出后会由ThreadExceptionHandler对象来处理,执行结果如下:
testThread
 java.lang.ArithmeticException: / by zero
    at onlyfun.caterpillar.ThreadExceptionDemo$1.run(
               ThreadExceptionDemo.java:8)
    at java.lang.Thread.run(Unknown Source)