2011-09-28 63 views
0

我意識到如果在我的runnable的運行方法裏面引發異常(或者不是,但應該是相關的),我所有未來的任務將不會運行。java ScheduledExecutorService可運行的異常處理

所以我的問題是:我該如何從這樣的異常中恢復(在哪裏捕捉它)?

我試過這個: ScheduledExecutorService Exception handling 如果我做了一個while循環來捕捉異常,未來的任務仍然沒有執行。我也嘗試安排捕捉,也沒有幫助。

我試圖把一個巨大的try/catch來包裝run方法中的所有代碼,但它似乎沒有捕獲任何東西,並且一些異常仍然沒有捕獲並導致我所有將來的任務都不能運行。

+0

也許會幫助http://stackoverflow.com/questions/7053865/cant-get-arrayindexoutofboundsexception-from-future-and-swingworker-if-thread/7054627#7054627 – mKorbel

+0

發佈你的實際代碼,甚至更好的簡化版本與同樣的問題。 – jtoberon

回答

2

在執行器框架中,您正在控制將作業從一個主應用程序線程運行到線程池線程。一個線程通過時間表提交工作,或者提交方法返回一個Future對象,允許它通過get方法獲取信息。 get方法將拋出一個執行程序異常,其原因可能是您的代碼在可運行內部拋出的異常。如果主線程不這樣做,它永遠不會看到這個異常,所以它真的取決於你的應用程序邏輯流程。

的另一件事情也說了,如果你嘗試捕獲所有,你這是什麼意思,如果你正在做類似的東西,以

try { 
.... 
} 
catch(Exception e) { 
    .... } 

你真的不是在您的應用程序捕獲錯誤(拋出是父親異常和錯誤),所以你可能有一些靜態初始化錯誤(陷入了一個靜態塊除外)

同樣這一切都取決於你如何想的異常處理髮生,你有充分的權力,

謝謝