我有以下代码。
Future<Integer> future = Executor.execute(callable);
Integer i;
try {
i = future.get();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return MESSAGE_INT_CODE;
} catch (ExecutionException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
}
return i;
其中ExecutionException
可以包含其他例外ABCException
。
并且我的调用代码正在捕获ABCException
,这是运行时异常,所以如果发生ExecutionException
,我怎么知道它是因为ABCException
?
我的ExecutionException
方法运行时由于某些异常导致public call()
。和call方法可能有一些ABCException
catch (ExecutionException e) {
throw new ABCException(e.getMessage());
// TODO Auto-generated catch block
//e.printStackTrace();
}
答案 0 :(得分:2)
尝试e.getCause() instanceof ABCException
答案 1 :(得分:1)
如果在执行call()方法期间发生异常,ExecutorService会捕获它并将其置于ExecutionException中。当你调用future.get(); future抛出ExecutionException,其中包含调用方法的异常。因此,如果我理解正确,您的代码可能如下所示:
try {
future.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
Throwable cause = e.getCause();
if(cause instanceof ABCException) {
// cast throwable to ABCException and rethrow it
throw (ABCxception) cause;
}else {
// do something else
}
}