4

如果用户强制关闭java(通过任务管理器或关闭相应的批处理文件),有什么方法可以使程序通过关闭挂钩。

我的程序目前运行良好,如果用户关闭 GUI,它会通过一系列步骤断开与数据库的连接。但是,如果用户关闭 Java 或批处理文件(与 GUI 并行运行),则不会关闭与数据库的连接。

是否有可能以某种方式强制关闭连接,甚至可能从表中删除某些内容?当我 jar 程序时,批处理文件可能不会成为问题,但进程终止仍然会。

4

1 回答 1

7

没有。

关闭挂钩将对 Ctrl+C、正常关闭、用户注销和正常系统关闭(请求正常关闭所有应用程序)做出反应。

但是,如果有人强制关闭应用程序,则假定这就是您真正想要的 - 立即终止,恕不另行通知。这个问题已经被问过很多次,并且被许多应用程序的行为弄糊涂了,当它们被要求强制关闭时,它们实际上需要很长时间才能最终终止。这是因为在操作系统释放所有资源的努力中,一些资源(尤其是某些 I/O 和/或文件资源)并没有立即释放。

在测试一个启动并打算运行到正常关闭的应用程序(例如服务器软件)时,您应该在控制台/命令行运行它,然后按 Ctrl+C 停止程序(这将运行关闭挂钩) 而不是使用任务管理器或 KILL -9。

此外,如果它愿意,Java 甚至无能为力。强制关闭发生在操作系统级别,此时它会释放正在使用的内存、文件和 I/O 句柄等。Java(也没有任何其他程序)无法控制强制关闭。此时,操作系统正在负责。

于 2011-11-02T00:39:51.913 回答