Java Swing – 在Mac上,监听Quit事件

在Mac上的Java应用程序中,您可以单击顶部栏并选择退出以退出程序。 如何向我的JFrame添加一个监听器来监听?

我对此进行了搜索并找到了ApplicationListener,但是Eclipse在这里放了一个“交叉”,似乎认为它已被弃用了。

具体来说,我发现使用com.apple.eawt.ApplicationListener,但我该怎么做? 我需要下载这个com.apple.eawt包吗? 我似乎无法找到它。

您需要注册ApplicationListener:

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

http://developer.apple.com/library/mac/#samplecode/OSXAdapter/Introduction/Intro.html

答案是使用Apple Java扩展中提供的较新版本QuitHandler

对于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获得了提示http://cr.openjdk.java.net/~michaelm/7113349/jdk8/webrev.4/jdk/raw_files/new/src/macosx/classes/com/apple/eawt/ Application.java

您可以在点击这样的交叉按钮时捕获

 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依赖:

  org.simplericity.macify macify 1.6  

在Java 9中,您应该使用跨平台的Desktop 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 } }); }