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

magician

Timer em Java

6 mensagens neste tópico

Ora bem o que eu preciso de implementar era algo do tipo cronometro ou seja que verifique quando passa 60 min e 1 min e para isso implementei esta class, ela realmente faz o que quero ela fica a em sleep 60 secs e passado esse tempo ele vai há instância time e vê em que minuto vai e se for = 0 e faz um print se não form apenas faz print do minuto.

import java.util.GregorianCalendar;
import java.util.Calendar;

public class Timer extends Thread{

GregorianCalendar time;

public Timer(){
	this.time = new GregorianCalendar();
}

public void run(){
	try{
		while(true){

			Thread.sleep(60000);
			if(this.time.MINUTE == 0){
				System.out.println("Mudou a hora.");
			}
			System.out.println(this.time.get(Calendar.MINUTE));
		}
	}
	catch(Exception e){
		e.printStackTrace();
	}
}

O problema é que o GregorianCalendar guarda um "Calendar" da hora actual e não o actualiza como tal ele tá sempre no mesmo tempo!

Ok isto podia ser resolvido fazendo new GregorianCalendar mas penso que estar a instanciar um novo objecto a cada 60secs é no mínimo mau.

Alguém sabe uma forma de resolver isto ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque é que não usas o método currentTimeMillis()?

Não sei se percebi bem mas creio que isto fará mais ou menos o mesmo:

        long time = System.currentTimeMillis();
    
        while(true) {
            try {
                Thread.sleep(60000);
                if(System.currentTimeMillis() - time >= 3660000) {//61 minutos são estes milisegundos todos 
                    System.out.println("Mudou a hora");
                }
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }

Posso não ter precebido bem o problema.... para controlares o minuto basta acrescentares um inteiro de controlo e reiniciares o seu valor sempre que muda a hora.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim eu também pensei nisso mas é que vou usar dias, e meses também por isso tem de ser mesmo com alguma coisa que me dê a hora do sistema em tempo real.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se tiver um tempo hoje dou uma olhadela pelo que queres, mas podes considerar o uso do Calendar.

A classe possui um método estático que te permite obter uma instância do calendário e depois podes aceder ao tempo... mas tenho de ver o código desse método para confirmar se vale a pena....

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