2010-07-04 123 views
6

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

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

回答

6

异常翻译:

这是一个好主意,不与没有意义的终端用户信息污染您的应用程序,而是创建有意义的异常和信息,这将转化异常/错误发生在您的应用程序实施的深处。

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

Effective Java 2nd Edition,第61项:

[...]高层应该抓住 较低级别的例外,在其 地方,抛出异常,可以是 在higher-来解释级别 抽象。这个成语被称为 异常转换:

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

+1只要确保您将原始异常传递给新构造函数,以便您可以看到完整的堆栈跟踪以及原因。 – 2010-07-04 14:24:50

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)); 
}