我正在創建一些多線程代碼,並創建了一個創建線程的JobDispatcher類。我想這個對象來處理的工作線程任何未處理的異常,所以我使用如何在Java中模擬未處理的異常
Thread.setUncaughtExceptionHandler(this);
現在,我想測試此功能 - 我怎麼能在的run()方法生成了未處理的異常我的工人對象?
我正在創建一些多線程代碼,並創建了一個創建線程的JobDispatcher類。我想這個對象來處理的工作線程任何未處理的異常,所以我使用如何在Java中模擬未處理的異常
Thread.setUncaughtExceptionHandler(this);
現在,我想測試此功能 - 我怎麼能在的run()方法生成了未處理的異常我的工人對象?
只拋出任何異常。
例如爲:
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();
}
}
做什麼用只是拋出一個異常的問題:
throw new Exception("This should be unhandled");
內,您的run方法。當然,沒有抓住它。它應該觸發你的處理程序。
您應該拋出一些未經檢查的異常。一個未經檢查的異常不需要你的代碼來處理它,因此它是一個很好的選擇,可以一直沿着調用棧。
您可以選擇例如的RuntimeException,甚至像Asse田,如果你想最大限度地減少了代碼的某些部分捕獲異常,且到達您的處理程序之前處理它的機會。
剛剛加入這樣的代碼,你會得到未處理的異常沒有皮棉錯誤:
int i = 1/0;
Eclipse將不會讓我這樣做的時候我編 - 它堅持我與周圍的try/catch。你知道如何改變這種行爲嗎? – 2010-06-14 22:26:22
它應該編譯。看起來像一些Eclipse特定的額外支票。 – 2010-06-14 22:30:06
Eclipse可能會投訴,如果拋出異常之後在方法中有其他代碼,使其成爲它所在方法中唯一/最後一行。 – Alb 2010-06-14 22:34:03