可能相当简单的问题,我无法找到怎么做。我想要做的只是每天午夜重启我的Java应用程序。所以我想象每分钟检查当前数据的内容,如果新日期大于初始日期,则执行以下操作:
try {
Runtime.getRuntime().exec("java -jar fxmonitor.jar");
} catch (IOException e) {
e.printStackTrace();
}
System.exit(0);
任何提示都非常赞赏。
答案 0 :(得分:1)
您可以使用系统支持的功能,例如Task scheduler或crontab。
答案 1 :(得分:1)
我想我的问题有一个样本
class SayHello extends TimerTask {
public void run() {
try {
Runtime.getRuntime().exec("java -jar fxmonitor.jar");
} catch (IOException e) {
e.printStackTrace();
}
}
}
从您的主要方法调用相同的内容:
public class sample {
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new SayHello(), 2000, 2000); // replace 2000 with 24hr converted to millisec
}
}
答案 2 :(得分:1)
MAJOR EDIT:首先你需要创建一个计时器。我建议创建一个公共变量Timer midnightTimer = new Timer()
。然后创建一个扩展TimerTask
的新类:
private class PeriodicTask extends TimerTask {
@Override
public void run() {
// ... YOUR TASK (code later in this post)
}
}
然后同时程序运行你可能想要在Date
上启动以下代码应该在当天的任何一天的午夜:
// today
Calendar date = new GregorianCalendar();
// reset hour, minutes, seconds and millis
date.set(Calendar.HOUR_OF_DAY, 0);
date.set(Calendar.MINUTE, 0);
date.set(Calendar.SECOND, 0);
date.set(Calendar.MILLISECOND, 0);
// next day
date.add(Calendar.DAY_OF_MONTH, 1);
Date midnightTonight = date.getTime();
这里可以看到一个例子java timer task schedule
您可以使用命令行启动Java程序。这可以通过Runtime.getRuntime().exec()
(有关详情,请查看Run .exe file from Java from file location和how to execute command line .exe file in java)
这方面的一个例子是:
try {
Runtime.getRuntime().exec("cmd.exe /c start " + PATHWAYTOYOURPROGRAM); //put here the absolute or relative path to launch the exe
} catch (IOException e) {
// ... could not launch
}
重新启动程序后,您可以删除原始程序:
System.exit(0);
编辑:AlexlH有一个好点。如果您确实有错误并且确实崩溃,那么它将不再在午夜运行。您还可以研究从创建计划任务您的java程序(如果尚不存在),然后在午夜再次运行java程序。但这样做会更难。这是一个可能有用的链接:
答案 3 :(得分:0)
使用Quartz调度程序。来自他们的网站:
什么是Quartz作业调度库?
Quartz是一个功能丰富的开源作业调度库,几乎可以集成在任何Java应用程序中 - 从最小的独立应用程序到最大的电子商务系统。 Quartz可用于创建简单或复杂的计划,以执行数十,数百甚至数万个作业;将任务定义为标准Java组件的作业,这些组件可以执行几乎任何可以编程的程序。 Quartz Scheduler包含许多企业级功能,例如支持JTA事务和集群。