我看到一种行为,我无法解释
我有一个Runnable,它的代码是:
run()
{
print("start");
try{
doSomething();
print("end");
}catch (Exception e){
print("problem");
}
print("method end");
}
这种行为很奇怪,因为我得到的 only 打印是“开始” - 我希望得到“问题”和“方法结束”打印。如果doSomething本身处理异常 - 那么将打印“end”。 但除了“开始”
,我没有得到任何印刷品现在我知道doSomething方法存在一些问题,好像我不通过执行程序服务运行它,我得到“找不到方法”异常。
我认为它可能以某种方式连接到我使用的Executor服务 - Executors.newFixedThreadPool,但我无法解释它
感谢您的建议!
答案 0 :(得分:8)
NoSuchMethodError
不是来自Exception
:
java.lang.Object
java.lang.Throwable
java.lang.Error
java.lang.LinkageError
java.lang.IncompatibleClassChangeError
java.lang.NoSuchMethodError
因此不会被发布的catch
子句捕获。更改为捕获Throwable
或为catch
添加单独的Error
子句并以不同方式处理(尝试从Exception
恢复但报告Error
并且不要尝试以恢复为例)。
答案 1 :(得分:4)
当然会抛出Error
。请尝试捕捉Throwable
。
编辑:的确,java.lang.NoSuchMethodError
是Error
。