2

我看到我无法解释的行为

我有一个 Runnable,它的代码是:

run()
{
    print("start");
    try{
        doSomething();
        print("end");    

    }catch (Exception e){
        print("problem");
    }
    print("method end");

}

这种行为很奇怪,因为我得到的唯一打印是“开始” - 我希望得到“问题”和“方法结束”打印。如果 doSomething 本身处理异常 - 那么将打印“结束”。但除了“开始”之外,我没有得到任何印刷品

现在我知道 doSomething 方法存在一些问题,就好像我没有通过执行程序服务运行它一样,我得到“方法未找到”异常。

我认为它可能以某种方式连接到我使用的 Executor 服务 - Executors.newFixedThreadPool,但我无法解释

谢谢你的建议!

4

2 回答 2

9

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并且不尝试恢复)。

于 2014-05-07T09:13:16.820 回答
4

当然Error是抛出。尝试捕捉Throwable

编辑:确实,java.lang.NoSuchMethodError是一个Error.

于 2014-05-07T09:12:00.017 回答