37

これらの2つの方法の違いは何ですか-System.exit()JFrame.dispose()

ボタンがクリックされたときにJavaSwingアプリケーションを閉じたい場合、どの方法を使用する必要がありますか?

4

6 に答える 6

59

System.exit();JavaVMを完全に終了させます。

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

どちらを選択するかは、実際には状況によって異なります。現在のJavaVMのすべてを終了する場合は、を使用する必要があります。そうすればSystem.exit()、すべてがクリーンアップされます。現在のウィンドウのみを破棄し、これが唯一のウィンドウである場合にJava VMを閉じる​​という副作用がある場合は、を使用しますJFrame.dispose()

于 2012-11-13T12:08:48.073 に答える
12

JFrame.dispose()

public void dispose()

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

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

System.exit()

public static void exit(int status)

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

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

Runtime.getRuntime().exit(n)
于 2012-11-13T12:09:17.440 に答える
6

上記に加えて、を使用しSystem.exit()て終了コードを返すことができSystem.exit(code);ます。これを使用してプロセスを自動的に呼び出すと、実行中にエラーが発生したかどうかを判断するのに役立ちます。

于 2012-11-13T12:12:53.283 に答える
4
  • 複数のウィンドウを開いていて、閉じたウィンドウのみを閉じたい場合は、JFrame.dispose().

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

于 2014-08-12T23:17:02.953 に答える
0

JFrame.dispose()は、このフレームにのみ影響します(このコンポーネント、そのサブコンポーネント、およびすべての子によって使用されるすべてのネイティブ画面リソースを解放します)。System.exit()はJVM全体に影響します。

すべてのJFrameまたはすべてのウィンドウを閉じて(フレームはWindowsを拡張するため)、アプリケーションを順序付きモードで終了する場合は、次のように実行できます。

Arrays.asList(Window.getWindows()).forEach(e -> e.dispose()); // or JFrame.getFrames()
于 2020-09-11T14:22:06.973 に答える
0

プログラムを終了する場合は、System.exit(0);を使用します。

一方、複数のウィンドウがありますが、1つのウィンドウのみを終了して閉じることができ、dispose();を使用します。

于 2021-09-22T08:42:46.520 に答える