Atualizar valor de um JLabel a cada 1 segundo

2 respostas
M

Pessoal, estou tentando atualizar um valor de um JLabel a cada 1 segundo, porém não estou conseguindo. (obs: estou utilizando thread)

public void t(String s) throws InterruptedException
  {
     lblAnimacao.setText(s);
     lblAnimacao.repaint();
  
     if (Thread.currentThread().interrupted())
        throw (new InterruptedException());
  
     Thread.currentThread().sleep(100);
  }

esse é o código que estou utilizando.

Se eu insiro um JOptionPane.showMessageDialog após o método repaint(), funciona.

Alguém pode me ajudar?

2 Respostas

mister_m

Você precisa executar o código que atualiza a tela dentro da EventDispatchThread do sistema. Faça +/- assim:

EventQueue.invokeAndWait(new Runnable() {
   public void run() {
      label.setText(....);
   }
});
ViniGodoy

Esses exemplos implementam um exemplo de um reloginho, através da atualização de um JLabel.

<a href="//www.guj.com.br/posts/list/52964.java#279083" data-bbcode="true">O primeiro usando threads;</a>

<a href="//www.guj.com.br/posts/list/15/52964.java#279088" data-bbcode="true">O segundo usando o timer do pacote util;</a>

<a href="//www.guj.com.br/posts/list/15/52964.java#279092" data-bbcode="true">E o terceiro usando o timer do Swing</a>.

A vantagem do terceiro é os eventos serão gerados na própria thread do swing, dispensando o EventQueue.invokeAndWait ou EventQueue.invokeLater.

Criado 28 de março de 2007
Ultima resposta 4 de abr. de 2007
Respostas 2
Participantes 3