如何从程序中退出Java应用


Answers:


192

您可以System.exit()用于此目的。

根据oracle的Java 8文档:

public static void exit(int status)

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

此方法在类Runtime中调用exit方法。此方法永远不会正常返回。

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

Runtime.getRuntime().exit(n)


102
System.exit(0);

“ 0”让任何人调用您的程序都知道一切正常。但是,如果由于错误而要退出,则应该System.exit(1);,或使用另一个与特定错误对应的非零数字。

另外,正如其他人提到的那样,请先清理!这涉及关闭文件和其他打开的资源。


我以为是System.exit(1)?
AFK 2010年

14
正如克里斯所说,System.exit(1)(或其他任何数字)是您是否要指出由于错误而关闭了它。System.exit(0)表示程序正常关闭。您还可以将1更改为任意数字,然后从脚本运行应用程序时,可以确定是否存在错误。
StormPooper 2011年

10

System.exit(int i)将使用,但我会将其包含在一个更通用的shutdown()方法中,在该方法中还将包括“清理”步骤,关闭套接字连接,文件描述符,然后使用退出System.exit(x)


6

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

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


4

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

我发现使用System.exit(x)重置“交互”窗格并假设您需要一些信息,这些信息全部消失了。


3

我同意乔恩的观点,让您的应用程序对某些内容做出反应并调用System.exit()。

请确保:

  • 您使用适当的退出值。0是正常出口,其他任何指示都存在错误
  • 您关闭所有输入和输出流。文件,网络连接等
  • 您记录或打印退出的原因,尤其是由于错误而退出时


1

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

这是“专业方式”:

//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 }
。– ycomp

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

1
更好:Runtime.getRuntime()。halt(0); 在Scala中为我完美地工作!
Gerhard Hagerer

@GerhardHagerer,但是如果您得到的不是最新版本,该怎么办?
Dude Bro

1
从Javadoc中获取halt:“应格外谨慎地使用此方法。与该exit方法不同,如果启用了退出时终结,则此方法不会导致启动关闭挂钩,并且不会运行未调用的终结器。如果关闭序列已已经启动,则此方法不会等待任何正在运行的关闭挂钩或终结器完成工作。” 简而言之,您不需要使用halt,而是应该使用exit
Erwin Bolwidt

-1

System.exit()会做你想要的。但是在大多数情况下,您可能希望退出线程,并使主线程保持活动状态。这样,您可以终止任务,但也可以保持启动另一个任务的能力,而无需重新启动应用程序。



-3

这应该以正确的方式进行:

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();
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.