在 Mac 上的 Java 应用程序中,您可以单击顶部栏并选择退出以退出程序。如何向我的 JFrame 添加一个监听器来收听这个?
我对此进行了搜索并找到了 ApplicationListener,但是 Eclipse 在其中放置了一个“叉号”,并且似乎认为它已被弃用。
具体来说,我发现使用 com.apple.eawt.ApplicationListener,但我该怎么做呢?我需要下载这个 com.apple.eawt 包吗?我似乎找不到它。
对于 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 和以下网址得到提示 http://cr.openjdk.java.net/~michaelm/7113349/jdk8/webrev.4/jdk/raw_files/new/src/macosx/classes/com/apple/eawt/应用程序.java
答案是使用更新版本的 QuitHandler,可从 Apple Java 扩展中获得
你需要注册一个ApplicationListener:
Apple 提供了一个示例应用程序:
http://developer.apple.com/library/mac/#samplecode/OSXAdapter/Introduction/Intro.html
当像这样单击划掉按钮时,您可以捕捉到
frame.addWindowListener(new ExitListener());
然后你可以像这样覆盖它 public class ExitListener extends WindowAdapter{
public void windowClosing(WindowEvent e){
//some codes
}
}
为了不破坏与 Windows 和其他操作系统的兼容性,这里采用另一种方法:
http://javadots.blogspot.com/2010/09/making-your-swing-app-macosx-compliant.html
Maven依赖:
<dependency>
<groupId>org.simplericity.macify</groupId>
<artifactId>macify</artifactId>
<version>1.6</version>
</dependency>
在 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
}
});
}