【问题标题】:Java thread crashes silently - I can't catch the exceptionJava 线程静默崩溃 - 我无法捕获异常
【发布时间】:2014-06-24 04:14:03
【问题描述】:

我看到一个我无法解释的行为

我有一个 Runnable,它的代码类似于:

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

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

}

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

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

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

感谢您的建议!

【问题讨论】:

    标签: java multithreading exception executorservice executors


    【解决方案1】:

    NoSuchMethodError 不是从Exception 派生的:

    java.lang.Object
        java.lang.Throwable
            java.lang.Error
                java.lang.LinkageError
                    java.lang.IncompatibleClassChangeError
                        java.lang.NoSuchMethodError
    

    所以不会被张贴的catch 子句捕获。更改为捕获Throwable 或为Error 添加单独的catch 子句并以不同方式处理(例如尝试从Exception 恢复但报告Error 并且不要尝试恢复)。

    【讨论】:

      【解决方案2】:

      当然会抛出一个Error。尝试捕获Throwable

      编辑:确实,java.lang.NoSuchMethodErrorError

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-25
        • 2015-08-31
        • 2013-11-05
        • 1970-01-01
        相关资源
        最近更新 更多