我尝试了addWindowListener
并实施了windowClosing
,当我按下关闭按钮时它可以工作,但是当我使用Cmd+Q
关闭时,windowClosing
不是被叫,怎么解决?我是否需要通过密钥监听器检测Windows上的Cmd+Q
,Alt + F4
?这是关闭窗口的一般监听器,无论是通过关闭按钮或键盘,还是事件Ctrl+Alt+Delete
或Cmd+Option+Esc
来集中杀戮?感谢。
答案 0 :(得分:2)
我不确定Mac上会出现什么情况,但是在Windows上你会从关闭按钮获得windowClosing()回调; Alt-F4
;如果你通过任务管理器关闭应用程序。如果您使用任务管理器来终止进程,则不会收到回调,但无论如何我都不会期望。
你记得在你的JFrame实例上调用setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
,不是吗?
答案 1 :(得分:2)
还有一种方法windowClosed() 尝试重写事物方法。希望它对你有用。
答案 2 :(得分:1)
听起来你需要添加一些KeyListeners
和一个工厂来检测你想要的特定操作系统。
答案 3 :(得分:1)
您可以使用此osx库: com.apple.eawt.ApplicationListener
handleQuit(ApplicationEvent event)
可能会做到这一点。
来自文档的信息:
在应用程序发送Quit事件时调用。当用户从应用程序菜单中选择退出,用户键入Command-Q,或者用户控件单击Dock中的应用程序图标并选择退出时,将生成此事件。您可以接受或拒绝退出请求。
当然,此解决方案不适用于Windows。据我所知,没有通用的解决方案,所以这可能是最好的方法。
答案 4 :(得分:0)
正如您所说,单击(x)按钮时会调用windowClosing。我也在Mac上,我得到CMD + Q向应用程序发送信号的方式正在使用getDefaultProps
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
// code to run when CMD+Q is pressed
}
}