调用HSQLDB jar中DatabaseManagerSwing类的main方法后如何获取窗口关闭事件?

Posted

技术标签:

【中文标题】调用HSQLDB jar中DatabaseManagerSwing类的main方法后如何获取窗口关闭事件?【英文标题】:How to get the window closed event after I invoke the main method of DatabaseManagerSwing class in HSQLDB jar? 【发布时间】:2019-12-23 11:16:44 【问题描述】:

我在我的 java 应用程序的内存数据库中使用 HSQL。我通过调用DatabaseManagerSwing 类的main 方法打开HSQLDB 提供的GUI manager。已成功打开。

我需要注册一个回调当用户手动关闭窗口时通知。我在文档中找不到类似的东西,在看到 DatabaseManagerSwing 类的代码后,我认为它不受支持。

stop 方法只是清除它的变量并且不调用任何其他方法。正如我在想如果它支持这个,它必须将回调对象存储在某个地方,最后在 stop 方法中调用它们。但不幸的是,什么都没有。

有什么办法或解决方法来完成这项工作吗?当用户关闭窗口时,我需要执行一些操作。

【问题讨论】:

见this answer(它实现了SecurityManager)。 其实swing代码就是库。我无法控制它。也许,这不是摇摆问题,而是与图书馆本身有关的问题。至于,hsqldb API中是否有一些东西可以使它成为可能。我想我是对的,但如果有可能,请详细说明,因为我无法理解。 【参考方案1】:

我添加了一个shutdownhook,以便在程序终止时运行。但事实并非如此。确保在启动 HSQL 数据库管理器时,不要传递 --noexit 参数。通过不传递参数,JVM 将在您关闭数据库管理器窗口时退出。

通过添加这个

Runtime.getRuntime().addShutdownHook(new Thread(() -> 
        // do your stuff
    ) 
    );

当用户手动关闭窗口时,您可以做您想做的事情。

【讨论】:

以上是关于调用HSQLDB jar中DatabaseManagerSwing类的main方法后如何获取窗口关闭事件?的主要内容,如果未能解决你的问题,请参考以下文章

HSQLDB - 适用于外部 Jar - 不适用于 JRE

在脚本中向 HSQLDB SqlTool 提供密码

HSQLDB:如何指定可以找到带有 SQL/JRT 函数的 JAR 文件的位置?

HSQLDB - 9.0 之前的客户端尝试连接

SQLTool 退出后不提交数据 (HSQLDB)

升级后 HSQLDB 命令行关闭不再起作用