Atualizar jLabel

4 respostas
S
Estou com um problema, reescrevi o evento WindowClosing e tudo funciona bem, mas a atualização de um JLabel dentro desse frame que está sendo fechado não atualiza de jeito nenhum. Já tentei dar um validate e repaint no painel pai, no frame e até no jLabel e nada. Segue um pedaço do código:
this.addWindowListener(new WindowAdapter(){            
            @Override
            public void windowClosing(WindowEvent we){
                lStatus.setText("...");
                Logger.getLogger("op").log("Encerrando...");
                killThreads();
                Logger.getLogger("op").log("Encerrado!");
                System.exit(1);
            }
        });
Alguém tem alguma dica? Muito obrigado. Obrigado.

4 Respostas

ViniGodoy

Tópico movido para o fórum de interface gráfica.

Para isso funcionar, esse código deveria estar sendo executado numa thread secundária.

S

ViniGodoy:
Tópico movido para o fórum de interface gráfica.

Para isso funcionar, esse código deveria estar sendo executado numa thread secundária.


Cara coloquei em thread mas não funcionou. Ficou desse jeito:

public void windowClosing(WindowEvent we){ new Thread(){ @Override public void run(){ lStatus.setText("..."); } }.start(); Logger.getLogger("op").log("..."); killThreads(); Logger.getLogger("op").log("Encerrado!"); System.exit(1); }
Era essa mesma sua sugestão?
Muito obrigado.

ViniGodoy

Não, era colocar o código todo, não só o setText.

O que acontece é que o swing roda num loop: processa evento, repinta, processa, repinta… e como seu código está dentro do evento está mantendo a thread do swing ocupada processando. Só quando o método acabar, é que ele vai repibtar.

Por isso a necessidade de mover um processamento pesado para outra thread.

S

Deu certo cara, muito obrigado.

Criado 9 de setembro de 2012
Ultima resposta 9 de set. de 2012
Respostas 4
Participantes 2