好吧!谢谢你找到了答案。我接受了副本,因为它正是我想要的,并且很好地解释了。 感谢大家的答案:)
有没有人对如何在Java中创建自定义异常处理程序有任何建议或想法?
我的意思是修改代码未取消 Exceptions
,Errors
以及更一般Throwable
的标准Java异常处理方法。
PHP的方法是define a custom exception handler,但似乎Java中没有这种方式。
我要实现的目标是在Java错误处理过程中插入自定义进程:
Uncatched Throwable - >通过JVM处理“我的代码之外” - >我的自定义流程 - >如果需要,恢复JVM标准异常处理
感谢大家的任何想法或建议!
有没有办法将此处理程序通用于所有线程而不在每个线程中明确声明? 我为这个主题开了一个新问题here。
答案 0 :(得分:5)
请注意,Java
为multithreaded
,exception
与threads
相关。如果Exception
未被捕获,您可以使用thread.setUncaughtExceptionHandler
。
thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
System.out.println("catching exception "+e.getMessage());
}
});
或者您可以使用AOP
方法并定义advice
来处理异常。看看AspectJ。
注意:你需要在这里小心,因为你最终可能会吞下异常,并且很难搞清楚bug的来源
答案 1 :(得分:2)
这可以通过以下线程完成:
public static void main(String[] args) {
Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override public void uncaughtException(Thread t, Throwable e) {
System.out.println("Caught: " + e.toString());
}
});
throw new RuntimeException();
}
设置UncaughtExceptionHandler
时,它会打印Caught: java.lang.RuntimeException
而非经典堆栈跟踪。
带有lambda的Java 8版本:
Thread.currentThread().setUncaughtExceptionHandler(
(t, e) -> System.out.println("Caught: " + e.toString()));
答案 2 :(得分:2)
是的,您可以使用Thread.setDefaultUncaughtExceptionHandler(CustomHandler)
JVM允许您通过实现Thread.UncaughtExceptionHandler
接口
所以基本上
public class MyHandler implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread t, Throwable e) {
// handle the exception
}
}