我有一个GUI Swing应用程序。
有没有办法捕捉所有异常?
我创建了一个包含数据库JDBC对象的数据库类。
它在我的Swing GUI类中被声明为一个字段。
e.g.
public class MySwingGUI {
protected Database database = new Database();
因此,如果任何异常从GUI代码中的某处传播,我想以某种方式处理它,以便我可以关闭数据库连接。
任何想法?
答案 0 :(得分:2)
实际上,您的代码应该捕获异常发生的位置,并适当地处理它们。只需在适当的退出条件下关闭数据库。
UI线程上的任何未处理的异常都会使应用程序崩溃。在这种情况下,您无需担心关闭数据库;该应用程序已经死了。
您可能正在寻找的是未捕获的异常处理程序。只需在UI线程上设置未捕获的异常处理程序。
请参阅UncaughtExceptionHandler doc
这更适合调试。它不是处理错误的好方法。
答案 1 :(得分:1)
另一种处理Swing异常的方法。你可以使用这样的东西。
public class EventQueueProxy extends EventQueue {
private static final Logger logger = Logger.getLogger( EventQueueProxy.class.getName() );
protected void dispatchEvent( AWTEvent newEvent )
{
try {
super.dispatchEvent( newEvent );
} catch( RuntimeException | Error e ) {
logger.error(e.getCause(),e);
JOptionPane.showMessageDialog( null, "someDescriptiveMessage");
}
}
}
您可以使用辅助方法来设置它
public static void captureUncaughtExceptionInEvent()
{
EventQueue queue = Toolkit.getDefaultToolkit().getSystemEventQueue();
queue.push(new EventQueueProxy());
}