1

Swing ベースの Java アプリケーションに Swing Application Framework JSR(296) を使用しています。

AboutBox と同様に、@Action の使用法に従い、いくつかの JDialog クラスをプロジェクトに追加しました。

問題は、メイン フレームを閉じても、アプリケーションがまだバックグラウンドで実行されていることです。これを克服するために、メイン アプリケーション クラスの configureWindow() に次のコードを追加しました。

protected void configureWindow(java.awt.Window root) {

    root.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
        // write your code here
            Application.getInstance(MyApp.class).exit();
        }
    });
}

しかし、この変更により、ダイアログ (AboutBox を含む) を閉じるたびに、メイン フレームも閉じます。

アプリケーション全体が終了するのを防ぎ、ダイアログ ボックスを閉じるにはどうすればよいですか?

更新: Swing Application Framework プロジェクトを作成できる NetBeans IDE 7.01 を使用しています。以下に示すように、プロジェクトのスケルトンが生成されます。

MyApp 
|--myapp 
|   |--MyApp.java
|   |--MyAppAboutBox.java
|   |--MyAppView.java
|
|--myapp.resources
    |--MyApp.properties
    |--MyAppAboutBox.properties
    |--MyAppView.properties

NetBeans IDE では、[ウィンドウ] -> [プロパティ] メニューからアクションを追加できます。

MyApp クラスは、私のメイン クラスである org.jdesktop.application.SingleFrameApplication を拡張します。

MyAppView extends FrameViewこれが私の主な見解です。

の実装クラスはパッケージに含まjavax.swing.JDialogれています。myapp.view

4

2 に答える 2

3

WindowEventクラスにはメソッド呼び出しgetWindow()があり、閉じているウィンドウを返します。

メソッド内でwindowClosing確認できます。ウィンドウがメイン アプリケーション ウィンドウである場合は、現在持っているコードを使用します。そうでない場合は、単にWindow.dispose()を呼び出します

編集:アプリケーションでカスタムダイアログを作成していることに気づきませんでした。もしかして、処分するのを忘れていませんか?自動生成された about ボックスにあるようなコードを追加する必要があります。

@Action public void closeAboutBox() {
    dispose();
}

ダイアログが閉じるたびにこのアクションを呼び出します。これが問題でない場合は、メイン ウィンドウを閉じたときにどのスレッドが実行されているかを調べるために、スレッド ダンプが役立つ可能性があります。

于 2012-07-06T13:33:35.400 に答える
1

あなたが実際に探しているのはですsetDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JavaDocAPIをご覧ください...

于 2012-07-06T14:39:06.743 に答える