Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的计划任务没有运行_Java_Timer - Fatal编程技术网

Java 为什么我的计划任务没有运行

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

我有一个计划任务,它从JSP页面获取主机名和其他日历信息。对于“HOUR_of_Day”输入,我总是添加12,并将总数传递到Calendar,因为它使用24小时格式。我昨天晚上做的很好,但今天早上不行。它不再按计划时间运行。我肯定做错了什么,需要一些指导。下面是我的代码:

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)。现在,这也不会启动任务。因此,肯定还有其他原因导致我的任务无法完成。