如何从程序中退出 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 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

退出java程序时如何自动调用函数? [复制]

如何在 Swing 应用程序中使用退出按钮?

如何从 Java 程序调整扬声器音量?

如何从我的应用程序中退出 Spotify?

如何从主函数外部提前退出 Rust 程序?

如何获取应用程序在退出前读取的数据库表的最后一行号