コードでJavaアプリケーションを終了する最良の方法は何ですか?
コードでJavaアプリケーションを終了する最良の方法は何ですか?
回答:
使用できます System.exit()
この目的に。
オラクルのJava 8ドキュメントによると:
public static void exit(int status)
現在実行中のJava仮想マシンを終了します。引数はステータスコードとして機能します。慣例により、ゼロ以外のステータスコードは異常終了を示します。。
このメソッドは、ランタイムクラスのexitメソッドを呼び出します。このメソッドは通常は戻りません。
呼び出し
System.exit(n)
は実質的に呼び出しと同等です:
Runtime.getRuntime().exit(n)
System.exit(0);
「0」は、プログラムを呼び出した人に、すべてがうまくいったことを知らせます。ただし、エラーのために終了する場合は、System.exit(1);
、特定のエラーに対応する、またはゼロ以外の数値を使用して終了する必要があります。
また、他の人が述べたように、最初にクリーンアップしてください!これには、ファイルやその他の開いているリソースを閉じることが含まれます。
System.exit(1)
(またはその他の数値)は、エラーが原因でクローズしたことを示したい場合です。System.exit(0)
プログラムが正常に終了したことを示します。1を任意の数に変更することもできます。その後、スクリプトからアプリケーションを実行しているときに、エラーが発生したかどうかを判断できます。
System.exit()
通常は最善の方法ではありませんが、アプリケーションによって異なります。
アプリケーションを終了する通常の方法は、main()
メソッドを終了することです。これは、グラフィカルユーザーインターフェイス(AWT、Swingなど)を備えたアプリケーションで通常行われているように、デーモン以外のスレッドが実行されている場合には機能しません。これらのアプリケーションの場合、GUIイベントループを終了する方法を見つける(AWTまたはSwingでそれが可能かどうかわからない)か、を呼び出すSystem.exit()
。
答えはSystem.exit()ですが、これによりプログラムが中止されるため、実行することはお勧めできません。クリーンアップ、破棄するつもりはありません。
質問には2つの簡単な答えがあります。
これが「プロフェッショナルな方法」です。
//This just terminates the program.
System.exit(0);
これはもっと不格好な方法です:
//This just terminates the program, just like System.exit(0).
return;
System.exit(0); return;
また、システムが終了する前に他のコードが実行されるのを防ぐために、リターンが返されます。それ以外の場合は、フラグが必要です(..i.e. if (!called_exit) { further code after exit statement }
Runtime.getCurrentRumtime().halt(0);
halt
:「このメソッドは細心の注意を払って使用する必要があります。exit
メソッドとは異なり、このメソッドはシャットダウンフックを開始せず、終了時のファイナライズが有効になっている場合、呼び出されていないファイナライザを実行しません。シャットダウンシーケンスがすでに開始されている場合、このメソッドは実行中のシャットダウンフックまたはファイナライザが作業を完了するのを待ちません。」要するに、あなたは使用する必要はありませんhalt
、あなたが好むはずですexit
。
これは正しい方法で行う必要があります:
mainFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
mainFrame.addWindowListener(new WindowListener() {
@Override
public void windowClosing(WindowEvent e) {
if (doQuestion("Really want to exit?")) {
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.dispose();
}
}