TimerTask agendar Hora

3 respostas
P

Olá,

Gostaria que o meu programa executasse uma ação todos os dias as 18h30 e 23h00 horas então fiz um programa utilizando a função TimerTask para agendar minhas tarefas como segue o exemplo:

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 18);
calendar.set(Calendar.MINUTE, 30);
calendar.set(Calendar.SECOND, 0);
Date time = calendar.getTime();

timer = new Timer();
timer.schedule(new TarefaTask(), time);

Mas percebi que ele não executa essa tarefa diariamente, ele está executando a tarefas nos horários programados apenas no dia que inicio a aplicação, nos dias seguintes ele não executa.

Como poderia deixar a aplicação aberta durante um mês e que executasse a minha tarefa todos os dias nos horários desejados?

Obrigado.

3 Respostas

keller

Uma solução seria fazer esse Timer executar um metodo de 3 em 3 segundos, e nesse metodo ele faria a checagem da hora, e entao faria o que você quizesse…

( Cuidado com esse metodo, ao seu final coloque as variaveis para null e System.gc(); )

Acho que ele executa apenas no primeiro dia porque achou a hora e o minuto executa o que deve ser executado e cai fora…

Valeu? até… :thumbup:

guile

Aqui provavelmente tem o que vc quer:

http://www-106.ibm.com/developerworks/java/library/j-schedule.html

[]s,
Guile

ricardolecheta

Vc pode utilizar o Quartz, e utilizar uma expressão cron. Neste exemplo vai rodar o seu Job as 18h30 e 23h30.

http://www.opensymphony.com/quartz/tutorial.html#cronTriggers

SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();

Scheduler sched = schedFact.getScheduler();

sched.start();

JobDetail jobDetail = new JobDetail("myJob", Scheduler.DEFAULT_GROUP, WSJob.class);

CronTrigger cron = new CronTrigger("trigger",Scheduler.DEFAULT_GROUP, "0 30 18-23 ? * *");

sched.scheduleJob(jobDetail, cron);
Criado 27 de maio de 2005
Ultima resposta 27 de mai. de 2005
Respostas 3
Participantes 4