我制作了一个将数据保存到 .data 文件的 java 应用程序。我有一个窗口监听器,它监听应用程序关闭,以便触发代码将数据保存到文件中。当按下我的专用退出按钮或按下窗口上的红色“X”时,一切都很好。然而,当用户选择命令 + q 路线时,事情就会变得糟糕。应用程序退出,但数据未保存。如何正确实现苹果的handleQuit(Application Event e)方法来解决这个问题?
在这种情况下你想要的是关闭钩子 http://www.developerfeed.com/threads/tutorial/understanding-java-shutdown-hook。关闭钩子监听操作系统信号以关闭应用程序,并在发送此信号时触发。关闭挂钩几乎可以运行任何代码。
您可以连接内置的红色“X”按钮来关闭应用程序(而不是保存文件),关闭挂钩将捕获请求并负责保存文件。
唯一需要注意的是,关闭挂钩应该由执行时间不长的代码组成。因此,文件的保存时间不应超过一两秒,并且不应使用用户必须在关闭挂钩中确认的确认对话框,因为在用户识别之前可能需要无限长的时间对话框。
关闭挂钩应该短暂存在的原因是,当请求关闭应用程序时,操作系统通常希望它在合理的时间内关闭。如果没有,例如在 Windows 中,操作系统可能会显示其中一条“应用程序没有响应...”消息。
最后,您稍后可能会遇到这个问题,您可能想知道如何从任务管理器(或 OS X 上的“强制退出应用程序”对话框)捕获“强制退出”请求。好吧,你无法抓住这些,而且你不应该尝试!尽管可以禁用诸如在“强制退出”菜单中列出您的应用程序之类的功能 https://stackoverflow.com/questions/3145677/java-disable-osx-force-quit,这是一个彻底的黑客行为,应该不惜一切代价避免。如果您设计应用程序的方式试图规避用户和管理员应始终可用的选项,那么这强烈表明您的应用程序设计不佳和/或行为不佳。想象一下,如果您安装了一个以这种方式运行的应用程序 - 您是否会认为程序员在试图赋予他们的应用程序不可杀死的品质方面是懒惰或可能是恶意的?
此外,强制退出是一种强制(不正常)关闭,仅应在应用程序挂起且无法正常退出时使用。操作系统需要有一种强制退出的选项,以便用户或管理员有办法杀死失控或无响应的应用程序。如果您的用户强制退出您的应用程序,他们要么会误解强制退出是不可取的,要么您的应用程序的设计中存在某些问题,使得强制退出比正常退出您的应用程序更有利。如果是这种情况(例如,您从用户那里听说他们出于某种原因强制退出),通常表明您的应用程序的一部分设计不佳,无法满足用户的期望。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)