Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Swing GUI应用程序中捕获异常_Java_Swing_Exception_Jdbc - Fatal编程技术网

Java 在Swing GUI应用程序中捕获异常

Java 在Swing GUI应用程序中捕获异常,java,swing,exception,jdbc,Java,Swing,Exception,Jdbc,我有一个GUI Swing应用程序 有没有一种方法可以捕获所有异常 我已经创建了一个数据库类来保存我的数据库JDBC对象 它在Swing GUI类中声明为一个字段 e.g. public class MySwingGUI { protected Database database = new Database(); 因此,如果任何异常从GUI代码中的某个地方传播,我希望以某种方式处理它,以便关闭数据库连接 有什么想法吗?实际上,您的代码应该捕获发生异常的地方,并适当地处理它们。只有在

我有一个GUI Swing应用程序

有没有一种方法可以捕获所有异常

我已经创建了一个数据库类来保存我的数据库JDBC对象

它在Swing GUI类中声明为一个字段

e.g. 

public class MySwingGUI {

  protected Database database = new Database();
因此,如果任何异常从GUI代码中的某个地方传播,我希望以某种方式处理它,以便关闭数据库连接


有什么想法吗?

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

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

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


这更多是为了调试。这不是处理错误的好方法。

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

我想我最初的问题并不重要。。。在阅读了您的文章并在此基础上做了更多的研究之后,我发现“在Swing应用程序中,默认行为仍然会将堆栈跟踪打印到控制台,但事件调度线程(主Swing线程)不会终止。尽管您的程序引发了任何运行时异常,事件调度线程始终保持活动状态。” ... 看来RuntimeExceptions不会杀死我的GUI@ycomp我的回答可以帮助您处理runtimeException:)