Java 在Swing GUI应用程序中捕获异常
我有一个GUI Swing应用程序 有没有一种方法可以捕获所有异常 我已经创建了一个数据库类来保存我的数据库JDBC对象 它在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代码中的某个地方传播,我希望以某种方式处理它,以便关闭数据库连接 有什么想法吗?实际上,您的代码应该捕获发生异常的地方,并适当地处理它们。只有在
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:)