有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将成为一个实现线程的类。UncaughtExceptionHandler是否捕获所有可能的未捕获异常?

目前,我有一个名为Foo的类,它是我的程序的入口点。当崩溃在任何时候发生时,我希望能够获得堆栈跟踪并将其输出到文件中。由于我的软件中所有可能的逻辑流都将从Foo开始,因此它似乎是处理未捕获异常的完美地方。我的想法是,抛出的任何异常最终都会被冒泡回Foo进行处理

目前,我有一个潜在的解决方案,我已经通过在其他类中抛出不同的异常来测试,这些类Foo调用,我的解决方案还没有失败。然而,我不是Java方面的专家,所以我想确保没有任何误解

假设我的软件中没有其他类实现UncaughtExceptionHandler,下面的crash方法是在某个Foo foo对象上调用的。是否存在抛出异常但从不调用foo.uncaughtException的情况

public class Foo implements Thread.UncaughtExceptionHandler {

    public Foo() {
        Thread.setDefaultUncaughtExceptionHandler(this);
    }

    public void crash() {
        Handler mainLooperHandler  = new Handler(Looper.getMainLooper());

        mainLooperHandler.post(new Runnable() {
            public void run() {
                // crash here
            }
        });
    }

    @Override
    public void uncaughtException(Thread t, Throwable e) {
        // handle uncaught exception
    }
}

我尝试过从上面Runnable.run中创建的另一个线程抛出异常,但我能够确保仍然调用foo.uncaughtException。有没有不可能的情况?我想到的一种可能性是,我从一个实现UncaughtExceptionHandler的外部SDK调用一个类,这可能会缩短foo.uncaughtException中的异常处理。还有什么地方会让我失望呢


共 (0) 个答案