gpt4 book ai didi

java - 处理关机事件

转载 作者:行者123 更新时间:2023-12-01 07:16:21 25 4
gpt4 key购买 nike

嗨,我有一个独立的应用程序,当用户登录时,应用程序关闭时会创建 abc.lck 文件,该文件会被删除。我已使用 addshutdownhook() 来删除该文件电源中断,即在我的应用程序运行时关闭电源。我的问题是当我手动关闭系统(即通过启动-->关闭)时,文件没有被删除,我应该提示用户收到一条消息,要求使用确认对话框(如 MS Word 中的对话框)保存更改。有人可以帮助我吗谢谢你柴图

最佳答案

addShutdown hook 的通用约定是

Java 虚拟机关闭以响应两种事件:

  • 当最后一个非守护线程退出或调用 exit(相当于 System.exit)方法时,程序正常退出,或者

  • 虚拟机因用户中断(例如键入 ^C)或系统范围的事件(例如用户注销或系统关闭)而终止。

关闭 Hook 只是一个已初始化但未启动的线程。当虚拟机开始其关闭序列时,它将以某种未指定的顺序启动所有已注册的关闭 Hook ,并让它们同时运行。当所有 Hook 完成后,如果启用了退出时终结,它将运行所有未调用的终结器。最后,虚拟机将停止。请注意,守护线程将在关闭序列期间继续运行,如果通过调用 exit 方法启动关闭,则非守护线程也会继续运行。

在极少数情况下,虚拟机可能会中止,即停止运行而不完全关闭。当虚拟机从外部终止时会发生这种情况,例如使用 Unix 上的 SIGKILL 信号或 Microsoft Windows 上的 TerminateProcess 调用。如果 native 方法出现错误,例如损坏内部数据结构或尝试访问不存在的内存,则虚拟机也可能中止。如果虚拟机中止,则无法保证是否会运行任何关闭 Hook 。

因此在关闭期间,Windows 计算机可能会调用 TerminateProcess,因此您的关闭 Hook 可能不会被调用。

关于java - 处理关机事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1392260/

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