处理关机事件

cha*_*thu 0 java

嗨,我有一个独立的应用程序,当用户登录abc.lck文件时,当应用程序关闭时,它会被删除.我已经使用addshutdownhook()删除文件,当电源中断,关闭电源当我的应用程序运行时供应.我的问题是当我手动关闭系统时文件没有被删除,即通过启动 - >关机,我应该提示用户使用cofirm dailog box保存更改,如在MS Word中可以帮助我一些人感谢你Chaithu

Pra*_*u R 6

addShutdown钩子的一般合约是

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

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

  • 响应于用户中断(例如,键入^ C)或系统范围的事件(例如用户注销或系统关闭),终止虚拟机.

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

在极少数情况下,虚拟机可能会中止,即停止运行而不会干净地关闭.当虚拟机在外部终止时会发生这种情况,例如Unix上的SIGKILL信号或Microsoft Windows上的TerminateProcess调用.如果本机方法因例如破坏内部数据结构或尝试访问不存在的内存而出错,则虚拟机也可能中止.如果虚拟机中止,则无法保证是否将运行任何关闭挂钩.

因此,在关机期间,Windows机器可能会调用TerminateProcess,因此可能不会调用您的关闭挂钩.