Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing-在Mac上,侦听退出事件_Java_Macos - Fatal编程技术网

Java Swing-在Mac上,侦听退出事件

Java Swing-在Mac上,侦听退出事件,java,macos,Java,Macos,在Mac上的Java应用程序中,您可以单击顶部栏并选择退出退出程序。如何将侦听器添加到JFrame中以侦听此消息 我对此进行了搜索,找到了ApplicationListener,但Eclipse在其中加了一个“叉号”,似乎认为它已被弃用 具体来说,我发现可以使用com.apple.eawt.ApplicationListener,但我该如何做到这一点?我需要下载这个com.apple.eawt包吗?我似乎找不到它。您需要注册一个ApplicationListener: Apple提供了一个示例应

在Mac上的Java应用程序中,您可以单击顶部栏并选择退出退出程序。如何将侦听器添加到JFrame中以侦听此消息

我对此进行了搜索,找到了ApplicationListener,但Eclipse在其中加了一个“叉号”,似乎认为它已被弃用


具体来说,我发现可以使用com.apple.eawt.ApplicationListener,但我该如何做到这一点?我需要下载这个com.apple.eawt包吗?我似乎找不到它。

您需要注册一个ApplicationListener:

Apple提供了一个示例应用程序:


您需要注册一个ApplicationListener:

Apple提供了一个示例应用程序:


答案是使用更新版本的QuitHandler,可从Apple Java extension获得

答案是使用更新版本的QuitHandler,可从Apple Java extension获得

当您像这样单击划掉按钮时,您可以捕捉到
frame.addWindowListener(new ExitListener());

然后你可以像这样覆盖它

当你像这样点击划掉按钮时,你可以捕捉到它
frame.addWindowListener(new ExitListener());
 public class ExitListener extends WindowAdapter{
        public void windowClosing(WindowEvent e){
            //some codes
        }
    }

然后您可以像这样覆盖它,对于Java 7,QuitHandler是要实现的接口

 public class ExitListener extends WindowAdapter{
        public void windowClosing(WindowEvent e){
            //some codes
        }
    }
import com.apple.eawt.QuitHandler;
import com.apple.eawt.Application;
在某个地方,请执行以下操作:

Application macApp = Application.getApplication();
macApp.setQuitHandler(this);
然后呢,

@Override
public void handleQuitRequestWith(AppEvent.QuitEvent qe,final QuitResponse qr) {
    System.out.println("quit clicked");
    qr.performQuit();

}
我从CodeGuy和下面的url得到了提示
对于Java 7,QuitHandler是要实现的接口

import com.apple.eawt.QuitHandler;
import com.apple.eawt.Application;
在某个地方,请执行以下操作:

Application macApp = Application.getApplication();
macApp.setQuitHandler(this);
然后呢,

@Override
public void handleQuitRequestWith(AppEvent.QuitEvent qe,final QuitResponse qr) {
    System.out.println("quit clicked");
    qr.performQuit();

}
我从CodeGuy和下面的url得到了提示

为了不破坏与Windows和其他操作系统的兼容性,这里有另一种方法:

Maven依赖项:

<dependency>
    <groupId>org.simplericity.macify</groupId>
    <artifactId>macify</artifactId>
    <version>1.6</version>
</dependency>

org.simplericity.macify
玷污
1.6

为了不破坏与Windows和其他操作系统的兼容性,这里有另一种方法:

Maven依赖项:

<dependency>
    <groupId>org.simplericity.macify</groupId>
    <artifactId>macify</artifactId>
    <version>1.6</version>
</dependency>

org.simplericity.macify
玷污
1.6

在Java 9中,您应该使用跨平台桌面API,因为Mac EAWT API已被弃用:

if (Desktop.isDesktopSupported()) {
    Desktop desktop = Desktop.getDesktop();
    desktop.setQuitHandler(new QuitHandler()
    {
        @Override
        public void handleQuitRequestWith(QuitEvent evt, QuitResponse res)
        {
            // TODO: Handle the quit request
            // res.cancelQuit();  // Cancel the quit request
        }
    });
}

在Java 9中,应使用跨平台桌面API,因为Mac EAWT API已被弃用:

if (Desktop.isDesktopSupported()) {
    Desktop desktop = Desktop.getDesktop();
    desktop.setQuitHandler(new QuitHandler()
    {
        @Override
        public void handleQuitRequestWith(QuitEvent evt, QuitResponse res)
        {
            // TODO: Handle the quit request
            // res.cancelQuit();  // Cancel the quit request
        }
    });
}

这对Quit不起作用,我担心:窗口没有真正“关闭”,因此没有调用侦听器。这对Quit不起作用,我担心:窗口没有真正“关闭”,因此没有调用侦听器。