как выполнить код в определенное время с помощью timertask

Привет, это мой класс слушателя

 public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
System.out.println("inside listener context");
Timer timer = new Timer();
Calendar cal = Calendar.getInstance();
  cal.set(Calendar.HOUR_OF_DAY, 19);
  cal.set(Calendar.MINUTE, 00); 
  cal.set(Calendar.SECOND, 00); 
  Time sqlTime4 = new Time(cal.getTime().getTime());
timer.schedule(new MyTimerTask(),sqlTime4);

}

Это мой класс timertask

package com.uttara.reg;
import java.util.Date;
import java.util.TimerTask;
public class Timer extends TimerTask {
    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("inside run of timer");
    }
    public void scheduleAtFixedRate(TimerTask timerTask, Date executionDate, long period)
    {
        System.out.println("run");
        // TODO Auto-generated method stub

    }

}

эта задача не запускается в конкретном событии, может ли кто-нибудь исправить проблему в ней....

заранее спасибо


person user2838630    schedule 07.10.2013    source источник
comment
надеюсь, что это будет полезно mkyong.com/java/jdk-timer-scheduler-example   -  person SpringLearner    schedule 07.10.2013
comment
будет ли мой выше обновленный код работать в 19:00   -  person user2838630    schedule 07.10.2013


Ответы (2)


Несколько проблем в вашем коде, вот они:

  1. Во-первых, вы выбрали запутанное имя для вашего дочернего класса TimerTask. Timer — это класс, определенный в пакете java.util, который используется для создания запланированной задачи.
  2. Вы создаете анонимный класс типа TimerTask, который будет использоваться для запуска запланированной задачи.

Вы можете попробовать изменить свой код следующим образом:

  public void contextInitialized(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("inside listener context");
        Timer timer = new Timer();
        Date executionDate = new Date();
        long period = 24 * 60 * 60 * 1000;
        timer.scheduleAtFixedRate(new MyTimerTask(), executionDate, period);    
  }

MyTimerTask

package com.uttara.reg;
import java.util.Date;
import java.util.TimerTask;
public class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("inside run of timer");
    }
    public void scheduleAtFixedRate(TimerTask timerTask, Date executionDate, long period)
    {
        System.out.println("run");
        // TODO Auto-generated method stub

    }

}
person Juned Ahsan    schedule 07.10.2013
comment
Спасибо за вашу помощь, этот код работает нормально, но я хочу подтвердить одну вещь из вашего требования, я хочу отправлять почту в 20:00 каждый день, как я могу установить его в этом коде - person user2838630; 07.10.2013
comment
Вы можете использовать таймер для запуска одноразовой задачи в 20:00, но не задачи, которая будет повторяться каждый день в 8:00, если ваша первоначальная задача не запускает другой таймер для запуска с 24-часовым интервалом. Это грязно. Вместо этого см. stackoverflow .com/questions/1498837/ - person NickJ; 07.10.2013

Почему вы создаете свой собственный класс Timer, который вы должны повторно использовать в java.util.timer

Просто используйте приведенный ниже код и удалите класс Timer.

public static void main(final String[] args) {

    System.out.println("inside listener context");
    final Timer timer = new Timer();
    final Date executionDate = new Date();
    final long period = 24 * 60 * 60 * 1000;
    timer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            System.out.println("inside lisner run con");
        }
    }, executionDate,

    period);

Убедитесь, что вы импортировали правильные классы Timer

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
person Pratik Shelar    schedule 07.10.2013