私は、シェルのような振る舞いをしてユーザのキーボード入力を受け付け、さまざまなアクションを実行する、サーバにメッセージを送ることができるインタラクティブなJavaプログラムを持っています。Javaコマンドラインプログラムを正しくシャットダウンする方法
例えばmyProgram> send "Login as James" to server
私のプログラムは、このような場合には、それがサーバーに「ジェームズとしてログイン」メッセージを送信し、ユーザの入力を解析し、アクションを実行します。
「quit」をサポートするコマンドの1つで、すべてのサーバー接続が閉じられ、リソースがクリーンアップされ、アプリケーションがシャットダウンされます。私は自分のコードに対してfindbugを実行すると、これはquitコマンドを処理するためのコードが
private void shutdown()
{
closeAllConnection();
cleanup();
System.out.println("Thank you for using the tool, have a nice day!");
System.exit(0);
}
、DM_EXITのバグは
Bug: new myProgram.messagingTools.main(String[]) invokes System.exit(...), which shuts down the entire virtual machine
Pattern id: DM_EXIT, type: Dm, category: BAD_PRACTICE
Invoking System.exit shuts down the entire Java virtual machine. This should only been done when it is appropriate. Such calls make it hard or impossible for your code to be invoked by other code. Consider throwing a RuntimeException instead.
を上げ、それがSystem.exitとシャットダウンに使用すべきではないと文句を言いされていますプログラム。
私のプログラムが「quit」コマンドを受け取ったときに、どのようにしてアプリケーションをシャットダウンすればよいですか?
メインメソッドの最後にSystem.exit(0)コールを置くと、findbugsはそれに不平を言っていません。 FindBugsはSystem.exitの呼び出しがコード内のさまざまな場所にあってはならないと言っているだけです。 – Mack