【问题标题】:Schedule top / terminate a Java program on a specific time在特定时间安排顶部/终止 Java 程序
【发布时间】:2017-04-28 13:28:18
【问题描述】:

有没有办法安排在特定时间停止或终止java程序。我正在使用 java.util.timer。例如晚上 10 点。我知道如何安排在特定时间启动 java 程序。问题是我无法找到终止程序的方法。

【问题讨论】:

  • System.exit(1) 停止一个 java 程序。但我不知道这是否是最好的方法......
  • "我知道如何安排在特定时间启动 java 程序" 使用相同的方法在所需时间安排kill -SIGTERM 怎么样?
  • 我想知道如何安排那个..for ex stop at 10pm..我的错误我没有在问题中提到它。我更新了我的问题。对不起
  • 您想停止“远程”Java 应用程序,而不是您的应用程序?
  • 今日日历 = Calendar.getInstance(); today.set(Calendar.HOUR_OF_DAY, 18);// 设置为 18,即 24 小时后的下午 6:00 today.set(Calendar.MINUTE, 00); today.set(Calendar.SECOND, 0); // 每天凌晨 2 点运行任务 Timer timer = new Timer(); timer.schedule( , today.getTime());类 CloseApp 实现 Runnable{ public void run(){ System.exit(0); }}}

标签: java timer


【解决方案1】:

您可以使用 TimerTask 来执行此操作,这是一个示例:

  import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.TimeUnit;

public class StopApp {
Timer timer = new Timer();
TimerTask StopApp = new TimerTask() {
    @Override
    public void run() {
        System.exit(0);
    }
};
public StopApp() {

//timer.schedule(exitApp, getDateDiff(new Date("get the actual time"), new Date("get the time you want to stop your app"), TimeUnit.SECONDS));
    //Example
    timer.schedule(StopApp, new Date(System.currentTimeMillis()+2*1000));//Exits after 2 sec of starting the app

while(true)

    System.out.println("The App still turn");
}

public static Date getDateDiff(Date date1, Date date2, TimeUnit timeUnit) {
    long diffInMillies = date2.getTime() - date1.getTime();
    Date date=new Date(diffInMillies);

    return date;//timeUnit.convert(diffInMillies,TimeUnit.MILLISECONDS);
}

public static void main(String[] args) {

    new StopApp();

}
}

【讨论】:

    【解决方案2】:

    你可以创建一个后台线程(为了不阻塞用户界面),你可以在里面检查当前的小时/分钟/天

    GregorianCalendar calendar = new GregorianCalendar (); // creates a new calendar instance 
    calendar.get(Calendar.HOUR_OF_DAY); // gets hour in 24h format
    calendar.get(Calendar.HOUR);        // gets hour in 12h format
    calendar.get(Calendar.MONTH);       // gets month number, NOTE this is zero based!
    Thread.sleep(60000)                 //sleep 60seconds
    
    if(<rightTime>)
        System.exit(0);
    

    另见https://stackoverflow.com/a/907207/6726261

    【讨论】:

      【解决方案3】:

      查看此文档:https://docs.oracle.com/javase/7/docs/api/java/lang/System.html#exit(int)System.exit(0); 可以为所欲为。

      【讨论】:

      • 我想知道如何安排那个..for ex stop at 10pm..我的错误我没有在问题中提到它。我更新了我的问题。对不起
      • D.Madu 说他正在使用 java.util.timer 所以我认为他已经知道如何安排任务(在这种情况下为 Sytem.exit(0))。
      • D.Madu 检查 nate_weldon 对此问题的回答:stackoverflow.com/questions/15747277/…。它可能会帮助你。
      【解决方案4】:

      停止你的程序使用:System.exit(0); 更多信息here

      【讨论】:

      • 您错过了问题的在特定时间部分
      • @AxelH I know how to schedule start a java program on a specific time. Problem is I cannot figure out a way to terminate a program.
      • 我想知道如何安排..因为晚上 10 点前停止.. 糟糕的是我没有在问题中提到它。我更新了我的问题。对不起
      【解决方案5】:

      您可以使用procrun,它将创建一个运行您的Java 应用程序的服务。然后您可以安排服务的启动和停止。

      您应该阅读docs of procrun,其中解释了如何配置您的服务。

      更简单的方法是运行创建服务的prunsrv //IS//my_service_name,然后执行prunmngr //ES//my_service_name,这将打开一个服务配置对话框,您可以在其中设置所有服务参数。

      您的应用程序将需要一个公共静态方法来调用,procrun 将使用该方法来停止您的应用程序。

      另一种选择是从流中读取并等待一些输入,当读取输入时,您会停止应用程序。

      这个流可以是一个套接字或一个文件,然后当你想停止你的应用程序时,你只需安排另一个应用程序在那个流上写入。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-31
        • 2015-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多