我有一个使用 addShutdownHook() 处理 Ctrl+C 的 Swing 应用程序,它可以正常工作,直到我有一个关闭任务调用一个函数,该函数在正常情况下会更改 JLabel 文本,此时它会挂起。
我认为问题在于 Swing EDT 要么已终止,要么正在等待某事。
有没有办法确定 EDT 已经终止或“完成”(这样我可以避免调用 Swing 方法),或者阻止 Ctrl-C 上通常的关闭所有窗口的行为?
只是为了澄清:
我在一个名为stop()
. 在正常情况下,这可以被调用(连同它的补码start()
),它会触发一系列导致 JLabel 更新的事情,以获得 astop()
已经发生的视觉反馈。
当我的关闭挂钩运行时,我需要调用stop()
以优雅地关闭一些资源。
我要问的是如何检测到 Swing EDT 不存在,所以我可以重写stop()
以便它检测到缺少 Swing 并避免调用 Swing 函数。