如何检测JFrame已关闭?

时间:2011-11-21 11:28:52

标签: java swing operating-system

我尝试了addWindowListener并实施了windowClosing,当我按下关闭按钮时它可以工作,但是当我使用Cmd+Q关闭时,windowClosing不是被叫,怎么解决?我是否需要通过密钥监听器检测Windows上的Cmd+QAlt + F4?这是关闭窗口的一般监听器,无论是通过关闭按钮或键盘,还是事件Ctrl+Alt+DeleteCmd+Option+Esc来集中杀戮?感谢。

5 个答案:

答案 0 :(得分:2)

我不确定Mac上会出现什么情况,但是在Windows上你会从关闭按钮获得windowClosing()回调; Alt-F4;如果你通过任务管理器关闭应用程序。如果您使用任务管理器来终止进程,则不会收到回调,但无论如何我都不会期望。

你记得在你的JFrame实例上调用setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);,不是吗?

答案 1 :(得分:2)

还有一种方法windowClosed() 尝试重写事物方法。希望它对你有用。

答案 2 :(得分:1)

听起来你需要添加一些KeyListeners和一个工厂来检测你想要的特定操作系统。

Check Out

答案 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
    }
}