gpt4 book ai didi

Java强制关闭程序

转载 作者:行者123 更新时间:2023-11-29 10:17:08 26 4
gpt4 key购买 nike

如何以编程方式在退出时强制关闭程序。我添加了调用 System.exit(0) 的关闭 Hook ,但执行它似乎有问题。 javaw.exe 进程在内存中保持运行,即使 Jframe 已关闭并执行了关闭 Hook 。

此外,当我手动关闭运行该程序的批处理文件时,Windows 会抛出 Force Close 消息。图片:http://i.imgur.com/gy57OEV.png

最佳答案

在关闭 Hook 中调用 System.exit() 是没有意义的。在调用钩子(Hook)之前,JVM 已经决定关闭。我想从关闭 Hook 调用 System.exit() 可能 是有问题的......

据推测,您的应用程序未关闭的原因是您的应用程序创建了其他线程,并且它们仍然存在。

处理此问题的一种方法是让 JFrame 关闭事件(或关闭按钮)触发启动 JVM 关闭的事件。您的 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) 代码是一种方法。它会调用 System.exit ...,并且会在 JVM 关闭时运行任何关闭 Hook 。

另一种方法是将其他线程标记为“守护进程”线程,这意味着它们不会阻止 JVM 决定关闭。 (通常,如果没有 Activity 的非守护线程,JVM 会拔掉插头。对于单线程应用程序,这意味着您的“主”线程……)


有趣的是,这就是 System.exit() 调用在关闭 Hook 中出现问题的原因。

javadoc 说 System.exit() 等同于 System.getRuntime().exit(),后者的 javadoc 是这样说的:

"If this method is invoked after the virtual machine has begun its shutdown sequence then if shutdown hooks are being run this method will block indefinitely."

因此,如果您在关闭 Hook 中调用 System.exit() ,这足以导致 Hook 无限期阻塞。这将导致关闭序列停止。

关于Java强制关闭程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14658397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com