web-dev-qa-db-ja.com

JFrame.dispose()vs System.exit()

これら2つのメソッド-System.exit()JFrame.dispose()の違いは何ですか?

JavaボタンがクリックされたときにSwingアプリケーションを閉じたい場合、どのメソッドを使用すればよいですか?

31
Adil

System.exit();は、Java VMを完全に終了します。

JFrame.dispose();は、JFrameウィンドウを破壊し、オペレーティングシステムによってクリーンアップします。 ドキュメント によると、これはJava VMが利用可能な他のWindowsがない場合に終了する原因になりますが、これは本当に単なる標準ではなく、副作用と見なされます。

あなたが選ぶものは本当にあなたの状況に依存します。現在のJava VMですべてを終了する場合は、System.exit()を使用する必要があり、すべてがクリーンアップされます。現在のウィンドウを破棄する場合は、 Java VMこれが唯一のウィンドウである場合は、JFrame.dispose()を使用します。

52
wattostudios

JFrame.dispose()

_public void dispose()
_

このWindow、そのサブコンポーネント、および所有されているすべての子によって使用されているすべてのネイティブスクリーンリソースを解放します。つまり、これらのコンポーネントのリソースは破棄され、それらが消費するメモリはすべてOSに返され、表示不能としてマークされます。 Windowおよびそのサブコンポーネントは、packまたはshowの後続の呼び出しでネイティブリソースを再構築することにより、再び表示可能にすることができます。再作成されたウィンドウとそのサブコンポーネントの状態は、ウィンドウが破棄された時点でのこれらのオブジェクトの状態と同じになります(これらのアクション間の追加の変更は考慮されません)。

注: Java仮想マシン(VM)内の最後の表示可能なウィンドウが破棄されると、VMが終了する場合があります。詳細については、AWTスレッドの問題。

System.exit()

_public static void exit(int status)
_

現在実行中のJava仮想マシン。引数はステータスコードとして機能します。慣例により、ゼロ以外のステータスコードは異常終了を示します。このメソッドはランタイムクラスのexitメソッドを呼び出します。通常は。

呼び出しSystem.exit(n)は、呼び出しと実質的に同等です。

_Runtime.getRuntime().exit(n)
_

上記に加えて、System.exit()を使用して終了コードを返すことができます。終了コードは、System.exit(code);を使用してプロセスを自動的に呼び出す場合、特に実行中にエラーが発生しました。

5
CloudyMarble
  • 複数のウィンドウを開いており、閉じたウィンドウのみを閉じたい場合は、JFrame.dispose().を使用します

  • すべてのウィンドウを閉じてアプリケーションを終了する場合は、System.exit()を使用します

4
Noah Herron