0

Mac上のJavaアプリケーションでは、トップバーをクリックし、[終了]を選択してプログラムを終了できます。これをリッスンするためにJFrameにリスナーを追加するにはどうすればよいですか?

これを検索してApplicationListenerを見つけましたが、Eclipseはこれに「取り消し線」を入れており、非推奨か何かを考えているようです。

具体的には、com.apple.eawt.ApplicationListenerを使用していることがわかりましたが、これを行うにはどうすればよいですか?このcom.apple.eawtパッケージをダウンロードする必要がありますか?見つからないようです。

4

6 に答える 6

1

ApplicationListenerを登録する必要があります。

Appleから入手可能なサンプルアプリケーションがあります。

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

于 2012-04-09T16:15:53.737 に答える
1

答えは、AppleJava拡張機能から入手できる新しいバージョンのQuitHandlerを使用することです。

于 2012-04-09T16:28:19.993 に答える
1

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

于 2014-02-11T10:00:24.740 に答える
0

このように消しボタンをクリックするとキャッチできます

frame.addWindowListener(new ExitListener());
そして、あなたはそれをこのように上書きすることができます
 public class ExitListener extends WindowAdapter{
        public void windowClosing(WindowEvent e){
            //some codes
        }
    }

于 2012-04-09T16:28:41.207 に答える
0

ここでWindowsや他のOSとの互換性を壊さないために、別のアプローチによるアプローチがあります。

http://javadots.blogspot.com/2010/09/making-your-swing-app-macosx-compatible.html

Mavenの依存関係:

<dependency>
    <groupId>org.simplericity.macify</groupId>
    <artifactId>macify</artifactId>
    <version>1.6</version>
</dependency>
于 2015-06-30T15:08:40.937 に答える
0

Java 9では、Mac EAWT APIが非推奨になったため、クロスプラットフォームのデスクトップ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
        }
    });
}
于 2018-04-03T20:01:06.810 に答える