JFrameを使って簡単なプログラムを作成すると、setVisibleメソッドがtrueになった瞬間から、フレームで何をしてもプログラムは終了しません。誰かがフローを説明してもらえますか?ありがとう
4 に答える
呼び出すmyJFrame.setVisible(true)
と、非デーモン Swing イベント スレッドが作成され、このスレッドとすべての非デーモン スレッドが終了するまでプログラムが終了しなくなります。JFrameが閉じられたときにプログラムを終了させたい場合は、
myJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JFrame が開いている場合、JFrame が非表示になっていても、プログラムが JFrame を更新し続け、再び表示されるかどうかを確認したり、画面の更新が必要かどうかを確認したりすることはわかっています。JFrame が閉じたときにプログラムを閉じたい場合は、以下を使用できます。
JFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
これは、可視性をチェックするスレッドを更新せず、JFrame が表示されなくなったときにプログラムを停止するだけです。
多分あなたは行方不明frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
ですか?
frame
フレームの名前はどこにありますか。
のドキュメントからsetDefaultCloseOperation(int)
。
次の選択肢のいずれかを指定する必要があります。
DO_NOTHING_ON_CLOSE
(で定義WindowConstants
): 何もしないでください。windowClosing
登録されたオブジェクトのメソッドで操作を処理するプログラムを必要としWindowListener
ます。HIDE_ON_CLOSE
(..): 登録されたオブジェクトを呼び出した後、フレームを自動的に非表示にしWindowListener
ます。DISPOSE_ON_CLOSE
(..): 登録されたオブジェクトを呼び出した後、フレームを自動的に非表示にして破棄しWindowListener
ます。EXIT_ON_CLOSE
(..): システム終了メソッドを使用してアプリケーションを終了します。これはアプリケーションでのみ使用してください。
3番目を強調するのは、通常、最後のものよりも優れているためです. その理由を2つ紹介します。
- この例のように、複数のフレーム インスタンスを順番に開いて破棄することができます。
- 最後のフレームを閉じるときに JVM が終了しない唯一の理由は、他の非デーモン スレッドが実行されているためです。これは、適切にシャットダウンする必要があることを示しています。このコンテキストでは、「で仮想マシンを強制終了する
System.exit(n)
」ことは「適切に」構成されません。