我的代码中出现了下面的异常,我想捕获内部异常。有没有可能抓到它?
java.lang.RuntimeException: error
some stack trace
some stack trace
some stack trace
! Caused by: java.util.concurrent.TimeoutException: null
some stack trace
some stack trace
some stack trace
假设我有以下代码。
function abc() {
try{
xyz()
} catch (TimeoutException e) {
do stuff
}
}
xyz()函数正在生成该异常。像这样捕获TimeoutException会起作用吗?
发布于 2018-06-07 04:24:09
你不能直接这么做。您必须捕获外部异常,检查它的getCause()
以查看它是否是您想要的,然后要么处理该原因,要么重新抛出顶级异常。
(从技术上讲,您也可以只重新抛出内部的堆栈,但我强烈建议您不要这么做;堆栈跟踪将非常混乱,并且更难调试--特别是一年后,当您忘记这样做的时候。)
发布于 2018-06-07 04:24:21
不,你不能用catch(TimeoutException e)
感染RuntimeException
。
但是,您可以这样做
} catch (RuntimeException e) {
Throwable cause = e.getCause();
}
才能找到原因。
发布于 2018-06-07 04:32:11
您不能直接捕获由TimeoutException
引起的RuntimeException
。
但是你可以这样实现它:
try {
xyz();
} catch (RuntimeException e) {
if (e.getCause() instanceof TimeoutException) {
// handle TimeoutException
doStuff();
} else {
// rethrow all exceptions with other causes
throw e;
}
}
https://stackoverflow.com/questions/50728901
复制相似问题