Java 为什么我的计划任务没有运行
我有一个计划任务,它从JSP页面获取主机名和其他日历信息。对于“HOUR_of_Day”输入,我总是添加12,并将总数传递到Calendar,因为它使用24小时格式。我昨天晚上做的很好,但今天早上不行。它不再按计划时间运行。我肯定做错了什么,需要一些指导。下面是我的代码:Java 为什么我的计划任务没有运行,java,timer,Java,Timer,我有一个计划任务,它从JSP页面获取主机名和其他日历信息。对于“HOUR_of_Day”输入,我总是添加12,并将总数传递到Calendar,因为它使用24小时格式。我昨天晚上做的很好,但今天早上不行。它不再按计划时间运行。我肯定做错了什么,需要一些指导。下面是我的代码: import java.util.Calendar; import java.util.Timer; import java.util.TimerTask; public class ScheduledTask exten
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
public class ScheduledTask extends TimerTask {
String hostname = null;
//The default no - arg constructor
//=============================
public ScheduledTask(){
}
/**
* Another overloaded constructor
* that accepts an object
* @param scanHostObj
public ScheduledTask(ScanHost scanHostObj){
hostname = scanHostObj.getHostname();
}
/**
* Another overloaded constructor
* that accepts a string parameter
* @param nodename
*/
public ScheduledTask(String nodename){
hostname = nodename;
}
/**
* The run method that executes
* the scheduled task
*/
public void run() {
new ScanUtility().performHostScan(hostname);
}
public void executeScheduledScanJob(ScanHost hostObj, Scheduler schedulerObj){
/**
* Get the various schedule
* data, convert to appropriate data type
* and feed to calender class
*/
String nodename = hostObj.getHostname();
String dayOfScan = schedulerObj.getDayOfScan();
String hourOfScan = schedulerObj.getHourOfScan();
String minuteOfScan = schedulerObj.getMinuteofScan();
//Convert String values to integers
//===================================
final int THE_DAY = Integer.parseInt(dayOfScan);
final int THE_HOUR = Integer.parseInt(hourOfScan);
final int REAL_HOUR = THE_HOUR + 12;
final int THE_MINUTE = Integer.parseInt(minuteOfScan);
/**
* Feed these time values to the Calendar class.
* Since Calendar takes a 24 - hour format for hours
* it is better to add 12 to any integer value for
* hours to bring the real hourly format to the 24
* format required by the Calendar class
*/
Calendar scheduleCalendar = Calendar.getInstance();
scheduleCalendar.set(Calendar.DAY_OF_WEEK, THE_DAY);
scheduleCalendar.set(Calendar.HOUR_OF_DAY, REAL_HOUR);
scheduleCalendar.set(Calendar.MINUTE, THE_MINUTE);
/**
* Then Initialize the timer Object
* and pass in parameters to it method
* cancel out all tasks/jobs after running them
*/
Timer scheduledTimeObj = new Timer();
ScheduledTask scheduledTaskObj = new ScheduledTask(nodename);
scheduledTimeObj.schedule(scheduledTaskObj, scheduleCalendar.getTime());
scheduledTimeObj.cancel();
scheduledTaskObj.cancel();
}
}
你可以试着替换
scheduleCalendar.set(Calendar.HOUR_OF_DAY, REAL_HOUR);
为此:
scheduleCalendar.set(Calendar.HOUR, THE_HOUR);
这个需要12小时的时间
此外,您可以将AM_PM设置为AM或PM。如果您试图解析PM日期,请在此处使用PM
scheduleCalendar.set(Calendar.AM_PM, Calendar.PM);
你的“不工作”根本不是描述性的。你有什么错误吗?没有,我没有任何错误。它不再在计划时间运行
REAL\u HOUR
计算不好。您将如何区分上午10点和晚上10点?我认为Calender会自动进行区分,如果它是24小时格式。结果:信息:日历时间是2018年8月21日星期二21:40:13 EDT,所以我坚持我的实施谢谢您的回复。我已经试过了,但我的问题是区分PM和AM谢谢,我会尝试你的建议,然后回来谢谢你Tobias的所有建议。我坚持我以前使用24小时格式的实现。下面是我得到的信息:信息:日历时间是2018年8月21日美国东部夏令时21:40:13好吧,您之前的实现不起作用,是吗?我看不出你贴的线有什么问题。您应该发布预期结果与实际结果,以及输入变量。预期结果是在计划时间启动并运行扫描。它周日工作,但昨天停止工作。今天早上,当我将calendar.getTime()替换为如下零时,它起作用了:scheduledTimerObj.schedule(新ScheduledTask(nodename),0)。现在,这也不会启动任务。因此,肯定还有其他原因导致我的任务无法完成。