我有一个用作集群应用程序的 Java Swing 应用程序。问题是每次集群尝试终止 Java 应用程序时,它都会挂起,Windows 会显示“立即结束”对话框。所述应用程序是一种服务器类型,因此它会在每次尝试连接到它时生成一个线程。
我了解到集群使用 this 中提供的程序发送 TERM 信号文章。但是当控制台应用程序用作集群应用程序时,集群可以在几个 TERM 信号后终止进程。
我还尝试了使用 NetBeans 6.8 创建新项目时可用的 vanilla 示例桌面应用程序。即使在收到信号后它也不会终止。
从上面的演示来看,我觉得跟Swing有关系,或者跟线程有关系。谁能帮我这个?谢谢。
编辑:虽然我认为它会发送另一个信号,但它可以通过使用任务管理器来终止。
最佳答案
当您的 Java 应用程序接收到 TERM 信号时,它将在终止之前运行任何已注册的关闭 Hook 。一种可能是这些关闭 Hook 之一无限期阻塞,或者运行时间过长(>30 秒),导致显示 Windows“立即结束”对话框。
您可以尝试的一件事是注册一个关闭 Hook ,它只打印到控制台并验证它确实被调用。但是,不幸的是,由于 Hook 以任意顺序运行,因此无法确定此时是否已运行其他关闭 Hook 。
关于Java Swing 应用程序在收到 TERM 信号后不会退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2544821/