我有一个使用executorService
的程序,我正在通过callables
。
每个类都是实现java.util.concurrent.Callable
的一个类的对象。
然后调用executorService
。在java.lang.NoClassDefFoundError
方法中的一个可调用对象的中间抛出call()
。
然而,它不会终止也不会登录控制台。因此无法知道程序是否正常工作。请以任何方式建议我能理解相同的内容。
答案 0 :(得分:2)
Callable抛出一个异常,它不是NoClassDefFoundError的超类。在你的Callable中,捕获Error(甚至是Throwable)并用异常包装它:
V call() throws Exception
{
try
{
return this.doSomething();
} catch (Error e) {
e.printStackTrace();
throw new Exception(e);
}
}
答案 1 :(得分:2)
要将错误打印到控制台,您可以创建Thread.UncaughtExceptionHander。将其传递给Thread#setDefaultUncaughtThreadExceptionHandler将导致在抛出错误时调用处理程序。
答案 2 :(得分:0)
有人已经发布了这个问题的答案,但是当我在验证后将其标记为答案时,该帖子很遗憾被删除了。我只是在重新说明答案。
调用invoke方法后由 ExecutorService 返回的Futures包含线程的所有Future对象。如果任何线程出现任何问题,则抛出java.util.concurrent.ExecutionException
。当我们对Future做get()
时,可以在拥有executorService的父线程中检测到哪个。然后e.getCause()
捕获它后会得到导致错误/异常的实际对象。