• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

andrepadez

Java - Timer e Timer Task

2 mensagens neste tópico

Boas,

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; 
Timer Countdown = new Timer();
//  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)
                ChronoTimer.Stop();
        }
}

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??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;

import java.util.TimerTask;
import java.util.Timer;

/**
*
* @author knitter
*/
public class Main {

    private static int i = 0;

    public static void main(String[] args) {
        
        Timer t = new Timer();
        t.schedule(new TimerTask() {

            @Override
            public void run() {
                System.out.println("Counting " + (++i));
            }
            
        }, 1000, 1000);
    }
}

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.

Ajuda?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora