如何正确关闭java命令行程序

Fer*_*han 5 java findbugs

我有一个交互式java程序,允许用户将消息发送到服务器,服务器的行为类似于shell,接受用户的键盘输入并执行各种操作.

例如

myProgram> send "Login as James" to server
Run Code Online (Sandbox Code Playgroud)

我的程序将解析用户输入并执行操作,在这种情况下,它将向服务器发送消息"Login as James".

我支持其"退出"的命令之一,它将关闭所有服务器连接,清理资源并关闭应用程序.以及处理此退出命令的代码是

private void shutdown()
{
  closeAllConnection();
  cleanup();
  System.out.println("Thank you for using the tool, have a nice day!");
  System.exit(0);
}
Run Code Online (Sandbox Code Playgroud)

当我对我的代码运行findbug时,会引发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.
Run Code Online (Sandbox Code Playgroud)

并且它抱怨System.exit不应该用于关闭程序.

有人建议我应该如何"在我的程序收到'退出'命令后关闭应用程序"?

Cam*_*ner 10

你没事.警告说"这应该只在适当的时候进行 "(强调我的)

这是一种合适的使用方式,System.exit因此您可以忽略该警告.

或者,如果您的整个程序是在main没有生成任何新线程的情况下运行的,那么您只需返回main并让程序自行关闭.如果你有任何新线程(特别是如果你使用Swing)那么你可能最好只使用System.exit...除非那些线程需要做一些清理,在这种情况下你需要一种方法来关闭它们优雅地