java - 如何重新抛出异常

标签 java android rethrow uncaughtexceptionhandler

在我的 onCreate() 中,我设置了一个 UncaughtException 处理程序,如下所示:

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
    @Override
    public void uncaughtException(Thread thread, Throwable throwable) {
       Log.e(getMethodName(2), "uncaughtException", throwable);
       android.os.Process.killProcess(android.os.Process.myPid());
    }
});

它工作正常,但我想恢复系统向用户显示强制关闭对话框的默认行为。

如果我尝试用 throw throwable 替换 KillProcess() 调用,编译器会提示我需要用 try/catch 包围它。

如果我用 try/catch 包围它:

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
    @Override
    public void uncaughtException(Thread thread, Throwable throwable) {
        try {
            Log.e(getMethodName(2), "uncaughtException", throwable);
            throw throwable;
        }
        catch (Exception e) {           
        }
        finally {               
        }
    }
});

编译器仍然提示 throw throwable 需要用 try/catch 包围。

如何重新抛出该可抛物?这样除了提供信息的 Log.e() 之外,系统的行为与以前完全一样:我从未设置默认的 UncaughtException 处理程序。

最佳答案

尝试:

public class CustomExceptionHandler implements UncaughtExceptionHandler {

    private UncaughtExceptionHandler defaultUEH;

    public CustomExceptionHandler() {
        this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
    }

    public void uncaughtException(Thread t, Throwable e) {
        Log.e("Tag", "uncaughtException", throwable);
        defaultUEH.uncaughtException(t, e);
    }
}

然后 Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler());

改编自this回答。

关于java - 如何重新抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11235513/

相关文章:

Java和Jboss7 : j_security_check Custom Implementation

java - 编译代码后不出现JFrame

java - 如果服务器没有响应,超时不起作用

android - Android 中的 JSON 到 listView

android - 如何为 Android 应用创建透明的演示屏幕?

android - Flutter项目添加华为agconnect后构建失败

java - 正则表达式匹配多次出现的字符

java - 使用新消息重新抛出 java 异常,如果它在方法声明列表中,则保留异常类型

exception-handling - 为什么 resharper 说 'Catch clause with single ' throw '语句是多余的'?

c# - 抛出 VS 重新抛出 : same result?