Cronometro/trempo real

3 respostas
S

olá,
fiz um código que mostra o tempo decorrido de uma jogada,
mas só quando clica em um botão é que mostra esse tempo.
Queria fazer este tempo ser mostrado em tempo real.
Sei que ficou bem simples , achei alguns exemplos
usando threads e alguns recursos que não conheço,
então preferi não usar.
Segue meu código:

inicio = System.currentTimeMillis();//armazena a hora inicial da jogada
long fim = System.currentTimeMillis() - inicio;
    int seg = (int) (fim / 1000);
    int hora = (seg / 3600);
    int min = (seg - hora * 3600) / 60;
    int seg2 = seg - hora * 3600 - min * 60;
    jBContagem.setText("Tempo:   " + Integer.toString(hora) + ":" + Integer.toString(min) + ":" + Integer.toString(seg2));//mostra o tempo decorrido num button

Grato

3 Respostas

flaviojmendes

Cara, a melhor opção seria usar Threads mesmo. Segue um link que deve te ajudar:

http://www.flaviojmendes.com/blog/2009/05/29/relogio-em-java-swing-usando-threads/

Abraço!

JoaoBluSCBR

Não tem outro jeito você vai ter de usar Threads.

Seu código é básico, apenas faz o cálculo do tempo, mas
você precisa que isso seja repetido constantemente inclusive
quando outras coisas estão decorrendo, então você precisa
de um processo concorrente. Algo que fique acontecendo
independente do que o programa estiver fazendo, para isso
a única coisa é usar threads.

Threads não são tão complicadas. São só processos disparados
com um evento dentro delas:

Coloquei um botão num Frame e dentro da própria classe do
Frame disparei uma Thread que modifica o valor do tempo no
label do botao>

public class MostraTempo extends javax.swing.JFrame {
    
    private long inicio;

    /** Creates new form MostraTempo */
    public MostraTempo() {
        initComponents();
        inicio = System.currentTimeMillis();//armazena a hora inicial da jogada         
        
        //Inicializa a classe da Thread
        AtualizaThread th = new AtualizaThread("Unica");
        th.start();
    }
    
    public void mostraTempoDecorrido(){
        long fim = System.currentTimeMillis() - inicio;
        int seg = (int) (fim / 1000);
        int hora = (seg / 3600);
        int min = (seg - hora * 3600) / 60;
        int seg2 = seg - hora * 3600 - min * 60;
        jBContagem.setText("Tempo:   " + Integer.toString(hora) + ":" + Integer.toString(min) + ":" + Integer.toString(seg2));//mostra o tempo decorrido num button  
    }
    
    class AtualizaThread extends Thread{
        
        private int lapso;
        
        public AtualizaThread(String nome){
            super(nome);
            
            lapso = 500; //A thread vai se executar a cada meio segundo.                        
        }
        
        public void run(){
            
            while(true){
                //O que vc quer que aconteça põe aqui.
                mostraTempoDecorrido();

                //esperar um pouco.
                try{
                    Thread.sleep(lapso);
                }
                catch( InterruptedException it){
                    System.err.println( it.toString());
                }
            }
        }
    }

Naturalmente que o resto da classe do Frame é a de sempre… e não vou postar aqui.

S

Obrigado pela ajuda, vou me interar sobre o assunto de threads e usar seu exemplo,obrigado!

Criado 29 de agosto de 2011
Ultima resposta 29 de ago. de 2011
Respostas 3
Participantes 3