2

JFrameを作成した場合、ウィンドウの小さな「終了ボタン」で閉じるまでプログラムが実行されるのはなぜですか?

私はこの答えを探しましたが失敗しました。私が推測した唯一のことは、それnew JFrame()が特別なもののようnewであり、EDT内のオブジェクトの参照を保持するため、常に参照され(匿名の「新規」であったとしても)、によって削除されることはないということです。ガベージコレクター。次に、ウィンドウを閉じるイベントがトリガーされるとすぐに、オブジェクトは逆参照されて破棄されます。

4

1 に答える 1

7

試してみてくださいyourFrame.setCloseOperation(JFrame.EXIT_ON_CLOSE)

実行を継続する理由は、いわゆるイベントディスパッチスレッドがバックグラウンドで実行を継続し、デーモン以外のスレッドを実行している限り、アプリケーションは終了しないためです。スレッドのドキュメントから:

Java仮想マシンが起動すると、通常、デーモン以外のスレッドが1つ存在します(通常、指定されたクラスのmainという名前のメソッドを呼び出します)。Java仮想マシンは、次のいずれかが発生するまでスレッドを実行し続けます。

  • クラスRuntimeのexitメソッドが呼び出され、セキュリティマネージャがexit操作の実行を許可しました。
  • runメソッドの呼び出しから戻るか、runメソッドを超えて伝播する例外をスローすることにより、デーモンスレッドではないすべてのスレッドが停止しました。

「GUIスレッド」を開始するのはJFrameの作成ではありません。このスレッドは、フレームが表示され、イベントをディスパッチする必要がある場合に開始されます。

于 2010-08-15T05:16:55.377 に答える