用Java定义自定义exception处理程序?
好 ! 谢谢你找到了答案。 我接受了副本,因为它正是我想要的,并且很好地解释了。 感谢大家的回答:)
有没有人对如何在Java中创建自定义exception处理程序有任何建议或想法?
我的意思是修改标准的Javaexception处理方法,用于代码未捕获的 Exceptions
, Errors
和更普遍的Throwable
。
PHP的方法是定义一个自定义的exception处理程序 ,但似乎在Java中没有这种方法。
我要实现的目标是在Javaerror handling过程中插入自定义进程:
未捕获的Throwable – >由JVM处理“我的代码外” – >我的自定义进程 – >如果需要,恢复JVM标准exception处理
感谢所有的想法或建议!
在你的答案后编辑
有没有办法将此处理程序生成所有线程而不在每个线程中明确声明? 我在这里为这个话题开了一个新问题。
请记住, 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
方法并定义处理exception的advice
。 看看AspectJ 。
注意:你需要在这里小心,因为你最终可能会吞下exception,并且很难搞清楚bug的来源
是的,您可以使用Thread.setDefaultUncaughtExceptionHandler(CustomHandler)
JVM允许您通过Thread.UncaughtExceptionHandler
接口的实现来自定义它
所以基本上
public class MyHandler implements Thread.UncaughtExceptionHandler { @Override public void uncaughtException(Thread t, Throwable e) { // handle the exception } }
这可以通过这样的线程来完成:
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()));