andrepadez Posted May 16, 2008 Report Share Posted May 16, 2008 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 More sharing options...
Knitter Posted May 17, 2008 Report Share Posted May 17, 2008 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? www.sergiolopes.eu Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now