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 } }); }