2010-06-14 74 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;