用Java定义自定义exception处理程序?

好 ! 谢谢你找到了答案。 我接受了副本,因为它正是我想要的,并且很好地解释了。 感谢大家的回答:)

有没有人对如何在Java中创建自定义exception处理程序有任何建议或想法?

我的意思是修改标准的Javaexception处理方法,用于代码未捕获的 ExceptionsErrors和更普遍的Throwable

PHP的方法是定义一个自定义的exception处理程序 ,但似乎在Java中没有这种方法。

我要实现的目标是在Javaerror handling过程中插入自定义进程:

未捕获的Throwable – >由JVM处理“我的代码外” – >我的自定义进程 – >如果需要,恢复JVM标准exception处理

感谢所有的想法或建议!

在你的答案后编辑

有没有办法将此处理程序生成所有线程而不在每个线程中明确声明? 我在这里为这个话题开了一个新问题。

请记住, Javamultithreadedexception与它们的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()));