Java Swing 应用程序在收到 TERM 信号后不会退出

标签 java windows swing multithreading signals

我有一个用作集群应用程序的 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/

相关文章:

java - 在没有Servlet容器的情况下使用CDI

java - JTabbedPane、Jpanel 和 Gridbaglayout

java - 如何在 Java Swing 中从第一帧开始生成 .gif 文件?

java - Bazel - 无法使用 Android Studio 构建

java - 代码甚至没有执行。 java

c++ - 选项卡控件及其子窗口

c++ - 以特权用户身份运行 Windows 服务

c++ - 获取当前 CPU 利用率的方法在 Windows 10 上运行不可靠

java - 如何摆脱 Java 中 MigLayout 的自动插入?

Java - 大字符串需要用不同的字段长度分割