在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()方法来设定异常处理对象,例如:
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)
|
|