【问题标题】:How to quit a java app from within the program如何从程序中退出 Java 应用程序
【发布时间】:2011-02-09 21:18:03
【问题描述】:

用代码退出 Java 应用程序的最佳方法是什么?

【问题讨论】:

  • 嗯。我觉得这个问题可能太笼统了。什么情况下退出?
  • 让你所有的非守护线程正常完成?

标签: 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();
                    }
                }
                

                【讨论】:

                  猜你喜欢
                  • 2017-01-13
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-01-18
                  • 1970-01-01
                  • 1970-01-01
                  • 2022-12-19
                  • 1970-01-01
                  • 2010-12-02
                  相关资源
                  最近更新 更多