在java中运行调度程序时,不会发生任何事情

在java中运行调度程序时,不会发生任何事情,java,Java,我正在创建一个计划程序,它每周一进行提醒。我编写了这些代码,但当我使用Tomcat服务器运行它时,eclipse的控制台中没有任何响应 runWeekly.java package Listener; public class runWeekly { public static void main(String[] args) { // TODO Auto-generated method stub new WeeklyReportService();

我正在创建一个计划程序,它每周一进行提醒。我编写了这些代码,但当我使用Tomcat服务器运行它时,eclipse的控制台中没有任何响应

runWeekly.java

package Listener;

public class runWeekly {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new WeeklyReportService();
    }

}
package Listener;

import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class WeeklyReportService {
    public WeeklyReportService(){
        this.startScheduler();
    }

    private void startScheduler(){
        Calendar with = Calendar.getInstance();
        Map<Integer, Integer> dayToDelay = new HashMap<Integer, Integer>();
                dayToDelay.put(Calendar.FRIDAY, 2);
                dayToDelay.put(Calendar.SATURDAY, 1);
                dayToDelay.put(Calendar.SUNDAY, 0);
                dayToDelay.put(Calendar.MONDAY, 6);
                dayToDelay.put(Calendar.TUESDAY, 5);
                dayToDelay.put(Calendar.WEDNESDAY, 4);
                dayToDelay.put(Calendar.THURSDAY, 3);
                int dayOfWeek = with.get(Calendar.DAY_OF_WEEK);
                int hour = with.get(Calendar.HOUR_OF_DAY);
                int delayInDays = dayToDelay.get(dayOfWeek);
                int delayInHours = 0;
                if(delayInDays == 6 && hour<12){
                    delayInHours = 12 - hour;
                }else{
                    delayInHours = delayInDays*24+((24-hour)+12);
                }
         ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);            
         scheduler.scheduleAtFixedRate(new WeeklyTask(), delayInHours,
                                       179, TimeUnit.HOURS);
    }
}
package Listener;

public class WeeklyTask implements Runnable {
    @Override
    public void run() {
        System.out.println("I'm running every monday at 12 pm");
    }
}
WeeklyReportService.java

package Listener;

public class runWeekly {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new WeeklyReportService();
    }

}
package Listener;

import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class WeeklyReportService {
    public WeeklyReportService(){
        this.startScheduler();
    }

    private void startScheduler(){
        Calendar with = Calendar.getInstance();
        Map<Integer, Integer> dayToDelay = new HashMap<Integer, Integer>();
                dayToDelay.put(Calendar.FRIDAY, 2);
                dayToDelay.put(Calendar.SATURDAY, 1);
                dayToDelay.put(Calendar.SUNDAY, 0);
                dayToDelay.put(Calendar.MONDAY, 6);
                dayToDelay.put(Calendar.TUESDAY, 5);
                dayToDelay.put(Calendar.WEDNESDAY, 4);
                dayToDelay.put(Calendar.THURSDAY, 3);
                int dayOfWeek = with.get(Calendar.DAY_OF_WEEK);
                int hour = with.get(Calendar.HOUR_OF_DAY);
                int delayInDays = dayToDelay.get(dayOfWeek);
                int delayInHours = 0;
                if(delayInDays == 6 && hour<12){
                    delayInHours = 12 - hour;
                }else{
                    delayInHours = delayInDays*24+((24-hour)+12);
                }
         ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);            
         scheduler.scheduleAtFixedRate(new WeeklyTask(), delayInHours,
                                       179, TimeUnit.HOURS);
    }
}
package Listener;

public class WeeklyTask implements Runnable {
    @Override
    public void run() {
        System.out.println("I'm running every monday at 12 pm");
    }
}
它必须在eclipse的控制台中写入我每周一下午12点运行的,但它没有写入。
我试着像java应用程序一样运行它,但它不起作用。

您的初始延迟太大了

星期四下午12点开始计算:

delayInHours = 3*24+((24-12)+12)=96

那么它将在96小时后开始

延迟的值是多少?它是程序在第一次执行调度程序之前应该等待的初始延迟。此外,您的时间单位是小时,因此您应该等待小时。另外,不要在构造函数中调用
startSchedule()
!将其设置为公共方法,并从
main
调用它。我已将其更改为91,时间为周四下午17点,但eclipse的控制台中没有任何内容。当您设置开始计划时,第二个参数(您的
delayInHours
)表示计划在延迟后首先开始。initialDelay—延迟第一次执行的时间。因此,您的日程安排将在程序启动后的91天内首次运行@demir5334我建议您更改方法:每小时运行一次调度程序,如下所示:
scheduler.scheduleAtFixedRate(新的WeeklyTask(),0,1,TimeUnit.HOURS)并在任务中检查当前时间是否符合您的要求。如果确实需要基于天/时间运行计划任务,请使用Quarz和类似cron的方法@phil_g我需要每周一运行它来执行此操作,我想我需要将
TimeUnit.HOURS
更改为
TimeUnit.DAYS
。我说得对吗?