2010-06-14 76 views
8

我正在创建一些多线程代码,并创建了一个创建线程的JobDispatcher类。我想这个对象来处理的工作线程任何未处理的异常,所以我使用如何在Java中模拟未处理的异常

Thread.setUncaughtExceptionHandler(this); 

现在,我想测试此功能 - 我怎么能在的run()方法生成了未处理的异常我的工人对象?

回答

14

只抛出任何异常。

例如为:

throw new RuntimeException("Testing unhandled exception processing."); 

完成:

public class RuntimeTest 
{ 
    public static void main(String[] a) 
    { 
    Thread t = new Thread() 
    { 
     public void run() 
     { 
     throw new RuntimeException("Testing unhandled exception processing."); 
     } 
    }; 
    t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() 
    { 
     public void uncaughtException(Thread t, Throwable e) 
     { 
     System.err.println(t + "; " + e); 
     } 
    }); 
    t.start(); 
    } 
} 
+0

Eclipse将不会让我这样做的时候我编 - 它坚持我与周围的try/catch。你知道如何改变这种行为吗? – 2010-06-14 22:26:22

+1

它应该编译。看起来像一些Eclipse特定的额外支票。 – 2010-06-14 22:30:06

+1

Eclipse可能会投诉,如果抛出异常之后在方法中有其他代码,使其成为它所在方法中唯一/最后一行。 – Alb 2010-06-14 22:34:03

5

做什么用只是抛出一个异常的问题:

throw new Exception("This should be unhandled"); 

内,您的run方法。当然,没有抓住它。它应该触发你的处理程序。

4

您应该抛出一些未经检查的异常。一个未经检查的异常不需要你的代码来处理它,因此它是一个很好的选择,可以一直沿着调用栈。

您可以选择例如的RuntimeException,甚至像Asse田,如果你想最大限度地减少了代码的某些部分捕获异常,且到达您的处理程序之前处理它的机会。

0

刚刚加入这样的代码,你会得到未处理的异常没有皮棉错误:

int i = 1/0;