我想使用自定义异常,以便在发生任何排序异常时出现用户友好的消息。
这样做的直接方式是什么?我是否应该采取额外的预防措施来避免干扰Swing的EDT?
答案 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));
}