【问题标题】:How to detect the JFrame is closed?如何检测 JFrame 是否关闭?
【发布时间】:2012-01-02 21:46:18
【问题描述】:

我尝试了addWindowListener并实现了windowClosing,当我按下关闭按钮时它可以工作,但是当我使用Cmd+Q关闭时,windowClosing没有被调用,我该如何解决?我是否需要在 mac 上检测Cmd+Q,在 Windows 上通过按键侦听器检测 Alt + F4?这是关闭窗口的一般监听器,无论是通过关闭按钮或键盘,还是事件Ctrl+Alt+DeleteCmd+Option+Esc 来聚焦杀死?谢谢。

【问题讨论】:

标签: java swing operating-system


【解决方案1】:

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

Check Out

【讨论】:

    【解决方案2】:

    我不确定 Mac 上的情况如何,但在 Windows 上,您会从关闭按钮获得 windowClosing() 回调; Alt-F4;如果您通过任务管理器关闭应用程序。如果您使用任务管理器终止进程,您不会收到回调,但无论如何我都不希望这样做。

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

    【讨论】:

      【解决方案3】:

      你可以使用这个 osx 库: com.apple.eawt.ApplicationListener

      handleQuit(ApplicationEvent event)
      

      可能会成功。

      来自文档的信息:

      在向应用程序发送 Quit 事件时调用。当用户从应用程序菜单中选择退出、用户键入 Command-Q 或用户控件单击 Dock 中的应用程序图标并选择退出时,将生成此事件。您可以接受或拒绝退出请求。

      当然,此解决方案不适用于 Windows。但据我所知,没有通用的解决方案,所以这可能是最好的方法。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 看起来(对我来说)windowClosing 会在他们点击 X 时被调用(而 windowClosed 没有),如果我以编程方式调用 dispose 则会调用 windowClosed。很奇怪。
        【解决方案5】:

        正如您所说,单击 (x) 按钮时会调用 windowClosing。我也在 Mac 上,我让 CMD+Q 向应用程序发送信号的方式是使用 Runtime.addShutDownHook

        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                // code to run when CMD+Q is pressed
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2019-02-21
          • 1970-01-01
          • 1970-01-01
          • 2023-03-10
          • 2011-09-04
          • 1970-01-01
          • 2016-05-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多