Java - Timer e Timer Task - Java - Portugal-a-Programar
Java - Timer e Timer Task
By andrepadez,
May 16, 2008 in Java
Tinha feito uma cena em C# que queria implementar agora em Java. TIpo um temporizador de cozinha. A estrutura era a seguinte:
public class Chrono()
int limitMinutes,limitSeconds;
//  construtor
public Chrono (int min, int sec) {
this.limitMinutes = min; this.limitSeconds = sec;
Countdown.delay = 1000; //milliseconds
Countdown.tick+= new eventhandler Countdown_Tick(this.Countdown_Tick);}
private void Countdown_Tick(object sender, EventArgs e)
if (limitSeconds == 0)
limitSeconds = 60;
limitMinutes--;
limitSeconds--;
if (limitMinutes == 0 && seconds == 0)
Ok, com esta classe só preciso receber no form principal o limite de tempo pelo utilizador, e criar um novo objecto Chrono com esse limite. Crio também um Timer neste form, que de segundo a segundo me mande uma ToString() do objecto.
Agora em java as coisas tornam-se bem mais complicadas, pois o eventhandler tem de ser definido recorrendo à criação de uma classe subclasse de TimerTask. Já dei voltas e mais voltas e não consegui atinar com isto. Alguem me pode dar uma ajuda??
Em Java, ou em C#, o princípio de um relógio é sempre o mesmo, existe um objecto que controla o tempo e que, em intervalos regulares, avisa todos os objectos que queiram saber de passagem de tempo através de um evento. É isso que tens feito no código acima e é isso que tens de implementar também em Java, a diferença é que não podes fazer a atribuição de eventos da mesma forma que em Java.
A seguinte classe permite demonstrar uma forma possível de implementar um timer usando as classes que queres.
package org.sergiolopes.allaroundtesting;
System.out.println("Counting " + (++i));
O método schedule que usei recebe 3 parâmetros, a subclasse de TimerTask que vai executar a tarefa, um long que indica o tempo de espera antes da tarefa iniciar, e um long que indica o periodo de tempo que separa o lançamento de eventos.
Estou a usar classes anónimas, em que crio uma subclasse de TimerTask à qual não dou nome.
A variável estática serve apenas para poder mostrar um contador simples, não é código correcto, e a execução não termina, isto é, tens de forçar o fim da execução do programa, mas penso que dê para ilustrar o que pretendes.