2011-09-28 50 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) { 
    .... } 

你真的不是在您的应用程序捕获错误(抛出是父亲异常和错误),所以你可能有一些静态初始化错误(陷入了一个静态块除外)

同样这一切都取决于你如何想的异常处理发生,你有充分的权力,

谢谢