拦截异常

时间:2010-07-04 14:14:23

标签: java swing exception intercept

我想使用自定义异常,以便在发生任何排序异常时出现用户友好的消息。

这样做的直接方式是什么?我是否应该采取额外的预防措施来避免干扰Swing的EDT?

2 个答案:

答案 0 :(得分:6)

异常翻译:

最好不要使用对最终用户没有意义的消息来污染您的应用程序,而是创建有意义的异常以及将转换发生在深处某处的异常/错误的消息。实施您的应用。

根据@ Romain的评论,您可以使用Exception(Throwable cause)构造函数来跟踪较低级别的异常。

来自Effective Java 2nd Edition,第61项:

  

[...]更高层应抓住   较低级别的例外,在他们的   地方,抛出可能的例外   根据更高层次的解释   抽象。这个成语被称为   异常翻译:

   // Exception Translation
    try {
         // Use lower-level abstraction to do our bidding
         ...
    } catch(LowerLevelException e) {
         throw new HigherLevelException(...);
    }

答案 1 :(得分:2)

您可以使用java.lang.Thread.UncaughtExceptionHandler来捕捉您自己不关心的所有例外

import java.lang.Thread.UncaughtExceptionHandler;

   public class MyUncaughtExceptionHandler implements UncaughtExceptionHandler {

   public void uncaughtException(Thread t, Throwable e) {
       Frame.showError("Titel", "Description", e, Level.WARNING);
       e.printStackTrace();
   }
}

在您的应用中注册:

public static void main(String[] args) {
    Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
}

在您的GUI中,您可以使用SwingX中的org.jdesktop.swingx.JXErrorPane来显示一个不错的错误弹出窗口,告知用户异常。

public static void showError(String title, String desc, Throwable e,
        Level level) {
    JXErrorPane.showDialog(this, new ErrorInfo(title,
            desc, null, null, e, level, null));
}