在特定时间安排顶部/终止 Java 程序

Posted

技术标签:

【中文标题】在特定时间安排顶部/终止 Java 程序【英文标题】:Schedule top / terminate a Java program on a specific time 【发布时间】: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); 【参考方案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://***.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 对此问题的回答:***.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 将使用该方法来停止您的应用程序。

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

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

【讨论】:

以上是关于在特定时间安排顶部/终止 Java 程序的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 Javascript/VuejS/Nodejs 包将特定的 JSON 键移动到 JSON 的顶部?

Android 通知单击保持堆栈并在需要时将应用程序置于最前面。如果特定活动在顶部,则传递数据

如何在 iOS 中为特定设备设置顶部空间限制?

在特定位置的图像顶部映射多个可点击元素

UIScrollView 不会在特定点停止,它会弹回顶部

导航到 Xamarin Shell 中的特定顶部选项卡页