Jump to content

Java - Timer e Timer Task


andrepadez
 Share

Recommended Posts

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

Link to comment
Share on other 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?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.