Java 异常 - 处理异常而不尝试捕获

2022-09-02 20:36:09

在 Java 中,我们使用 try catch 块来处理异常。我知道我可以像下面这样编写一个try catch块来捕获方法中抛出的任何异常。

try {
  // do something
}
catch (Throwable t) {

}

但是,在Java中,有没有办法允许我在发生异常时调用一个特定的方法,而不是像上面那样编写一个包罗万象的方法?

具体来说,我想在引发异常时在我的 Swing 应用程序中显示用户友好的消息(我的应用程序逻辑不处理)。

谢谢。


答案 1

缺省情况下,JVM 通过将堆栈跟踪打印到 System.err 流来处理未捕获的异常。Java允许我们通过提供自己的实现接口的例程来自定义此行为。Thread.UncaughtExceptionHandler

看看我不久前写的这篇博客文章,其中详细解释了这一点(http://blog.yohanliyanage.com/2010/09/know-the-jvm-1-uncaught-exception-handler/)。

总之,您所要做的就是编写自定义逻辑,如下所示:

public class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
  public void uncaughtException(Thread t, Throwable e) {
     // Write the custom logic here
   }
}

并使用我在上面的链接中描述的三个选项中的任何一个进行设置。例如,您可以执行以下操作来设置整个 JVM 的默认处理程序(因此,引发的任何未捕获的异常都将由此处理程序处理)。

Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler() );

答案 2
try {
   // do something
   methodWithException();
}
catch (Throwable t) {
   showMessage(t);
}

}//end business method

private void showMessage(Throwable t){
  /* logging the stacktrace of exception
   * if it's a web application, you can handle the message in an Object: es in Struts you can use ActionError
   * if it's a desktop app, you can show a popup
   * etc., etc.
   */
}

推荐