JDialogがメインウィンドウの場合にJavaプログラムを適切に閉じる

java swing windowlistener
JDialogがメインウィンドウの場合にJavaプログラムを適切に閉じる

アプリケーションのメインウィンドウとしてJDialogを使用します(元々はJFrameでしたが、タスクバーに表示したくありませんでした)。

現在私はやっています:

setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

そして、終了ボタンをクリックすると:

frame.dispose();

しかし、プロセスはまだバックグラウンドでうろついているようです

JFrameには `JFrame.EXIT_ON_CLOSE`があり、私が望んでいたことを行っているようです。

アプリケーションを適切に閉じるにはどうすればよいですか?

  6  0


ベストアンサー

ダイアログが閉じたときにSystem.exit(0)を実行するWindowListenerを追加する必要があります。

JDialog dialog = ...;
dialog.addWindowListener(new WindowAdapter() {
    @Override public void windowClosed(WindowEvent e) {
      System.exit(0);
    }
  });

もちろん、Exitボタンを押した後のSystem.exit(0)(このスレッドの他の場所で提案された)はまだ必要です。

11


あなたは付け加えられます

  System.exit(0);

プログラムを終了する場所、おそらくdispose()行の直後。

6


JWindow(デフォルトではdecoretad)の使用を検討しますが、それは少し複雑です。JWindow`は JFrame`からの初期化を必要とします(存在する必要があり、他には何もありません)

「WindowListener」を追加し、すべてのイベント/アクションをリダイレクト/管理する方が良いでしょうhttps://stackoverflow.com/questions/7080638/basic-java-swing-how-to-exit-and-dispose-of-your-application -jframe / 7082054#7082054 [この方法]

3


You know that the

[EXIT_ON_CLOSE]フィールドも` JDialog`に継承されますか?

@camickrで述べたように、「EXIT_ON_CLOSE」はhttp://download.oracle.com/javase/6/docs/api/javaxの有効な値ではありません`JDialog`クラスの/swing/JDialog.html#setDefaultCloseOperation%28int%29 [` setDefaultCloseOperation`]メソッド。 APIで述べられているように、

__
ユーザーがこのダイアログで「閉じる」を開始したときにデフォルトで発生する操作を設定します。 次の選択肢のいずれかを指定する必要があります。

  • DO_NOTHING_ON_CLOSE(` WindowConstants`で定義):しない
    何でも;登録されたWindowListenerオブジェクトのwindowClosingメソッドで操作を処理するプログラムを要求します。

  • HIDE_ON_CLOSE(` WindowConstants`で定義):自動的に非表示にします
    登録された「WindowListener」オブジェクトを呼び出した後のダイアログ。

  • DISPOSE_ON_CLOSE(WindowConstantsで定義):自動非表示
    登録された「WindowListener」オブジェクトを呼び出した後、ダイアログを破棄します。
    __

引数として「EXIT_ON_CLOSE」が渡されると、「IllegalArgumentException」がスローされます。

1


私にとってはwindowClosingイベントでのみ働いていました:

dialog.addWindowListener(new WindowAdapter()
                @Override
                public void windowClosing(WindowEvent e) {
                     System.exit(0);
                }
    });

0


あなたは驚くべきソースコードの下でこれを試すことができます-

JDialog dialog = (JDialog) container;
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setModal(false);
dialog.setVisible(false);
dialog.dispose();

Runtime.getRuntime().exit(1);

このJDialogが他のJFrameまたはJDialogの上で実行されている場合、JDialogコンテナーを破棄した後だけでなく、このJDialogが終了することはありませんが、このJDialogがその上で実行されている場合、所有している場合、プロセスは完全に終了します、お楽しみください。

0


タイトルとURLをコピーしました