如何从程序中退出 Java 应用程序
Posted
技术标签:
【中文标题】如何从程序中退出 Java 应用程序【英文标题】:How to quit a java app from within the program 【发布时间】:2011-02-09 21:18:03 【问题描述】:用代码退出 Java 应用程序的最佳方法是什么?
【问题讨论】:
嗯。我觉得这个问题可能太笼统了。什么情况下退出? 让你所有的非守护线程正常完成? 【参考方案1】:您可以为此使用System.exit()
。
根据 oracle 的 Java 8 文档:
public static void exit(int status)
终止当前运行的 Java 虚拟机。该参数用作状态码;按照惯例,非零状态码表示异常终止。
此方法调用 Runtime 类中的 exit 方法。此方法永远不会正常返回。
调用
System.exit(n)
实际上等同于调用:
Runtime.getRuntime().exit(n)
【讨论】:
【参考方案2】:System.exit(0);
“0”让调用您的程序的人知道一切正常。但是,如果您因错误而退出,您应该System.exit(1);
,或使用与特定错误相对应的另一个非零数字。
另外,正如其他人所提到的,先清理!这涉及关闭文件和其他开放资源。
【讨论】:
我以为是 System.exit(1) ? 正如 Chris 所说,System.exit(1)
(或任何其他数字)是如果您想表明它因错误而关闭。 System.exit(0)
表示程序正常关闭。您还可以将 1 更改为您喜欢的任何数字,然后当您从脚本运行应用程序时,您可以确定是否有错误。【参考方案3】:
System.exit(int i)
将被使用,但我会将其包含在更通用的 shutdown()
方法中,其中您还将包括“清理”步骤,关闭套接字连接,文件描述符,然后 以System.exit(x)
退出。
【讨论】:
【参考方案4】:System.exit()
通常不是最好的方法,但这取决于您的应用程序。
结束应用程序的常用方法是退出main()
方法。当有其他非守护线程正在运行时,这不起作用,这对于具有图形用户界面(AWT、Swing 等)的应用程序来说是很常见的。对于这些应用程序,您要么找到结束 GUI 事件循环的方法(不知道 AWT 或 Swing 是否可行),要么调用 System.exit()
。
【讨论】:
【参考方案5】:使用dispose();
是关闭程序的一种非常有效的方法。
我发现使用System.exit(x)
会重置交互窗格,并假设您需要其中的一些信息,它会全部消失。
【讨论】:
【参考方案6】:我同意 Jon 的观点,让您的应用程序对某事做出反应并调用 System.exit()。
请确保:
您使用适当的退出值。 0为正常退出,其他表示有错误 您关闭所有输入和输出流。文件、网络连接等。 您记录或打印退出的原因,尤其是由于错误而退出时【讨论】:
【参考方案7】:答案是 System.exit(),但这不是一件好事,因为这会中止程序。任何你打算做的清理、破坏都不会发生。
【讨论】:
【参考方案8】:这个问题有两个简单的答案。
这是“专业的方式”:
//This just terminates the program.
System.exit(0);
这是一种更笨拙的方式:
//This just terminates the program, just like System.exit(0).
return;
【讨论】:
System.exit(0); return;
也不错,return 会阻止任何 ruther 代码在系统退出之前运行,否则您需要一个标志 (..i.e. if (!called_exit) further code after exit statement
【参考方案9】:
Runtime.getCurrentRumtime().halt(0);
【讨论】:
更好:Runtime.getRuntime().halt(0);在 Scala 中非常适合我! @GerhardHagerer 但是如果你得到不是当前的runti,我怎么办? 来自halt
的Javadoc:“使用此方法时应格外小心。与exit
方法不同,此方法不会导致启动关闭挂钩并且不会运行未调用的终结器,如果finalization-on-exit 已启用。如果已启动关闭序列,则此方法不会等待任何正在运行的关闭挂钩或终结器完成其工作。简而言之,你不应该使用halt
,你应该更喜欢exit
。【参考方案10】:
System.exit()
会做你想做的事。但在大多数情况下,您可能希望退出线程,并让主线程保持活动状态。通过这样做,您可以终止一个任务,但也可以在不重新启动应用程序的情况下启动另一个任务。
【讨论】:
【参考方案11】:System.exit(ABORT); 立即退出该过程。
【讨论】:
没有ABORT这样的变量。【参考方案12】:这应该以正确的方式进行:
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();
【讨论】:
以上是关于如何从程序中退出 Java 应用程序的主要内容,如果未能解决你的问题,请参考以下文章