我有一个用作集群应用程序的Java Swing应用程序。问题是,每次集群尝试终止Java应用程序时,它都会挂起,Windows会显示“立即结束”对话框。所述应用程序是一个服务器类型,因此它会为每次连接到它的尝试生成一个线程。
我了解到群集使用this文章中提供的程序发送了TERM信号。但是当控制台应用程序用作群集应用程序时,群集可以在几个TERM信号之后终止该过程。
我还尝试了使用NetBeans 6.8创建新项目时可用的vanilla示例桌面应用程序。即使在收到信号后它也不会终止。
从上面的演示中,我认为它与Swing或线程有关。谁能帮我这个?谢谢。
编辑:可以通过使用任务管理器来杀死它,但我认为它会发送另一个信号。答案 0 :(得分:2)
当您的Java应用程序收到TERM信号时,它将在终止之前运行任何已注册的关闭挂钩。一种可能性是这些关闭挂钩中的一个无限期地阻塞或者花费很长时间(> 30秒)来运行,导致Windows“立即结束”对话框被显示。
您可以尝试的一件事是注册一个关闭挂钩,只需打印到控制台并验证它确实被调用。但是,遗憾的是,当钩子以任意顺序运行时,无法确定其他关闭挂钩是否已经运行。