如何在Java程序中退出应用程序

155

如何使用代码最好的退出Java应用程序?


1
嗯,我认为这个问题可能太笼统了。在什么情况下退出? - Allen George
3
让所有非守护线程正常结束? - Thorbjørn Ravn Andersen
12个回答

201

您可以使用System.exit()来实现此目的。

根据Oracle Java 8文档:

public static void exit(int status)

终止当前正在运行的Java虚拟机。参数作为状态码;按照惯例,非零状态码表示异常终止

该方法在类Runtime中调用退出方法。该方法从不正常返回。

System.exit(n)调用实际上等同于调用:

Runtime.getRuntime().exit(n)


109
System.exit(0);

"0" 表示你的程序执行正常。但如果因为错误而退出,你应该使用 System.exit(1); 或其他对应特定错误的非零数字。

此外,就像其他人提到的那样,先进行清理工作!这包括关闭文件和其他开放资源。


我以为是 System.exit(1)? - AFK
14
如Chris所说,System.exit(1)(或任何其他数字)表示程序因错误而关闭。System.exit(0)表示程序正常关闭。你还可以将1更改为任何你喜欢的数字,这样当你从脚本中运行应用程序时,你可以确定是否发生了错误。 - StormFoo

10

System.exit(int i)是用于终止Java虚拟机的方法,但我建议将其包含在更通用的shutdown()方法中,该方法中还包括“清理”步骤,例如关闭套接字连接、文件描述符,然后才使用System.exit(x)结束程序。


6

System.exit()通常不是最好的方法,但这取决于你的应用程序。

结束应用程序的常规方式是退出main()方法。当有其他非守护线程运行时,这种方式不起作用,这在具有图形用户界面(AWT、Swing等)的应用程序中很常见。对于这些应用程序,您要么找到一种方法来结束GUI事件循环(不知道是否可以在AWT或Swing中实现),要么调用System.exit()


4

使用dispose();是关闭程序的一种非常有效的方法。

我发现使用System.exit(x)会重置交互面板,如果你需要其中的一些信息,那么所有信息都会消失。


3

我同意Jon的观点,让你的应用程序对某些事件做出反应并调用System.exit()。

请确保:

  • 您使用适当的退出值。 0是正常退出,其他任何值表示发生了错误
  • 关闭所有输入和输出流。文件,网络连接等。
  • 记录或打印退出的原因,特别是如果是因为错误而退出

1
答案是System.exit(),但这并不是一个好的做法,因为它会中止程序。您打算进行的任何清理、销毁操作都将无法发生。

0

这个问题有两个简单的答案。

这是“专业方式”:

//This just terminates the program.
System.exit(0);

这是一种更加笨拙的方式:

//This just terminates the program, just like System.exit(0).
return;

System.exit(0); return; is good too, the return prevents any ruther code from being run before the System can exit, otherwise you'd need a flag (.. i.e. if (!called_exit) { further code after exit statement } - ycomp

-1
Runtime.getCurrentRumtime().halt(0);

1
更好的写法:Runtime.getRuntime().halt(0); 在Scala中对我完美地起作用了! - Gerhard Hagerer
@GerhardHagerer 如果你得到的是非当前运行时呢? - Dude Bro
1
halt的Javadoc中:“应该极度谨慎地使用此方法。与exit方法不同,此方法不会启动关闭挂钩,并且如果已启用退出时终结,则不会运行未调用的终结器。如果关闭序列已经启动,则此方法不会等待任何正在运行的关闭挂钩或终结器完成其工作。”简而言之,您不应该需要使用halt,而应该使用exit - Erwin Bolwidt

-2

System.exit()会实现你想要的功能。但在大多数情况下,你可能只想退出一个线程,而保留主线程的运行。这样做可以终止一个任务,同时又能够在不重启应用程序的情况下启动另一个任务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接