关闭 Windows 控制台时如何优雅地关闭 Java 应用程序?

Posted

技术标签:

【中文标题】关闭 Windows 控制台时如何优雅地关闭 Java 应用程序?【英文标题】:How to gracefully shutdown a Java application when of closing the Windows console? 【发布时间】:2017-03-08 08:48:31 【问题描述】:

这个问题已经asked before,但仍然没有答案。

场景是从 Windows 控制台窗口启动 Java 命令行程序。当控制台窗口的“X”关闭按钮被按下时,程序仍然被执行。

效果是程序在没有执行关闭挂钩的情况下终止(它们就位并在 Ctrl-C 上正确反应)。

This answer 到 that question 表明可以从 C 中完成。

是否有一个(可能是特定于平台的)库允许对关闭事件做出反应并使用 Java 中的 SetConsoleCtrlHandler?

【问题讨论】:

为什么不应该将其作为链接问题的副本关闭? @Jiri Tousek:“您不能将问题标记为未回答问题的重复。” (***.com/help/duplicates) 链接的问题已经有 2 年以上的三个答案,但这不是重点。这个问题与需要新问题的链接问题有何不同? 也许这个答案就是你要找的***.com/questions/9277630/… 【参考方案1】:

也许可以使用JNA 在windows消息上设置一个钩子:WM_CLOSE,并检查它是否由您的应用程序窗口句柄触发。

【讨论】:

以上是关于关闭 Windows 控制台时如何优雅地关闭 Java 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

优雅地终止基于 Boost Asio 的 Windows 控制台应用程序

从外部进程优雅地关闭UWP应用程序

如果优雅地关闭ExecutorService提供的java线程池

如何优雅地关闭 ASP.Net(非核心)

如何在 Netty 中的 ssl 握手之前优雅地关闭频道?

优雅地关闭节点实例,不中途停止任何事情