【问题标题】:How to make Java program exit after a couple of seconds如何让Java程序在几秒钟后退出
【发布时间】:2013-03-22 18:05:21
【问题描述】:

无论如何我可以在几秒钟后退出 java 程序,例如5秒。

我知道您可以使用以下命令退出 java 程序:

System.exit(0);

但我不确定自这段代码以来 0 是否代表秒:

System.exit(10);

也立即退出

【问题讨论】:

  • 这很有趣,但你到底为什么要退出正在运行的虚拟机呢?
  • 0 does not stand for seconds。在 System.exit(X) 中,X 是您程序的退出代码(它将报告给调用 shell),它与时间无关。
  • @Eugene 我正在尝试创建一个你必须快速回答数学问题的游戏。

标签: java system exit seconds


【解决方案1】:

您可以在退出程序之前调用Thread.sleep()

// Your code goes here.

try 
{
   Thread.sleep(5000);
} 
catch (InterruptedException e) 
{
   // log the exception.
}

System.exit(0);

【讨论】:

  • 如果启用了安全检查,这可能会失败
  • @Eugene 是的,它可能会。您能详细说明并为该案例提供解决方案吗?
【解决方案2】:
import java.util.Timer;
import java.util.TimerTask;

/**
 * Simple demo that uses java.util.Timer to schedule a task 
 * to execute once 5 seconds have passed.
 */
class Reminder {

    Timer timer;

    public Reminder(int seconds) {
        timer = new Timer();
        timer.schedule(new RemindTask(), seconds * 1000);
    }

    class RemindTask extends TimerTask {
        public void run() {
            System.out.format("Time's up!%n");
            System.exit();
            timer.cancel(); //Terminate the timer thread
        }
    }

    public static void main(String args[]) {
        new Reminder(10);
        System.out.format("Task scheduled.%n");
    }
}

通过这种方式,您可以使用 Timer 类并在特定时间间隔后退出系统

【讨论】:

    【解决方案3】:

    System.exit(0) 指定程序的退出错误代码。

    你可以把它放在一个计时器上并安排任务

    import java.util.Date;
    import java.util.Timer;
    import java.util.TimerTask;
    
    public class TimedExit {
    Timer timer = new Timer();
    TimerTask exitApp = new TimerTask() {
    public void run() {
        System.exit(0);
        }
    };
    
    public TimedExit() {
    timer.schedule(exitApp, new Date(System.currentTimeMillis()+5*1000));
        }
    
    }
    

    然后你就可以调用 TimedExit()

    【讨论】:

    • 谢谢,我使用了这个想法,并将其更新为 java 8 方式。现在是单线:Executors.newSingleThreadScheduledExecutor().schedule(() -> System.exit(0), 60, TimeUnit.SECONDS);
    【解决方案4】:

    来自System.exit(int) 方法文档:

    终止当前运行的 Java 虚拟机。论据 作为状态码;按照惯例,一个非零状态码 表示异常终止。

    如果您需要在等待退出期间执行某些操作,您可以创建一个控制线程,它将等待正确的时间执行退出,如下所示:

    public class ExitFewMiliseconds {
    
        public static void main(String args[]) {
    
            new Thread(new Runnable() {
                public void run() {
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.exit(0);
                }
            }).start();
    
            while (true) {
                System.out.println("I'm doing something");
            }
        }
    
    }
    

    如果在等待退出时没有执行任何操作,您可以简单地使用 Thread.sleep(ms)

    【讨论】:

      【解决方案5】:

      传递给 System.exit(0) 的 0 与退出前等待的时间无关。 Javadocs are your friend。来自 javadoc:

      参数用作状态码;按照惯例,非零状态 code表示异常终止。

      如果您真的需要,其他答案已经涵盖了如何在退出前等待 5 秒。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-26
        • 2021-09-06
        • 1970-01-01
        • 2012-10-03
        相关资源
        最近更新 更多