1

我有一个 GUI Swing 应用程序。

有没有办法捕获所有异常?

我制作了一个包含我的数据库 JDBC 对象的数据库类。

它在我的 Swing GUI 类中被声明为一个字段。

e.g. 

public class MySwingGUI {

  protected Database database = new Database();

因此,如果任何异常从 GUI 代码中的某处传播,我想以某种方式处理它,以便我可以关闭数据库连接。

有任何想法吗?

4

2 回答 2

2

实际上,您的代码应该在异常发生的地方捕获它们,并适当地处理它们。数据库只需要在适当的退出条件下关闭。

UI 线程上任何未处理的异常都会使应用程序崩溃。在这种情况下,您无需担心关闭数据库;该应用程序已死。

您可能正在寻找的是未捕获的异常处理程序。只需在 UI 线程上设置未捕获的异常处理程序。

请参阅UncaughtExceptionHandler 文档

这更多用于调试。它不是处理错误的好方法。

于 2013-08-09T13:27:35.823 回答
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());
    }
于 2013-08-09T18:22:09.600 回答