接着我们看子线程如何捕获主线程的异常
例:1.5.4_2
import java.lang.Thread.UncaughtExceptionHandler;
class ThreadMark_to_win extends Thread {
Thread mainT;
Test test;
ThreadMark_to_win(Thread t1,Test t2)
{
mainT = t1;
test=t2;
mainT.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) {
System.out.println("在子程序处理呢, 传进来的参数是"+test.name+" "+t.getName()+" "+ e.getMessage());
}
});
}
public void run()
{
for(int i=0;i<3;i++)
{
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
System.out.println("在子线程"+i);
}
}
}
public class Test {
String name="马克-to-win在主线程";
public static void main(String[] args) {
Thread mainT = Thread.currentThread();
Test t=new Test();
ThreadMark_to_win tm = new ThreadMark_to_win(mainT,t);
tm.start();
for (int i = 0; i < 3; i++)
{
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
System.out.println("在主线程" + i);
}
throw new RuntimeException("在主线程,我自己抛出的一个异常");
}
}
更多请见:http://www.mark-to-win.com/tutorial/java_6_SubCatchMain.html