Me parece que o problema é que você está congelando a thread da AWT. O que ocorre é que, no momento que você faz um setText(), uma mensagem é enviada para GUI e empilhada numa pilha da AWT. Entretanto, essa mensagem na é processada, pois a thread da AWT é congelada pelo seu sleep().
Para resolver o problema, me parece que a solução é fazer o sleep numa thread separada e, só depois disso, pedir para a thread da AWT limpar as caixas de texto.
Putz Vinicius Valeu mesmo cara…
Vc sabe o que é ficar 2 dias batendo cabeça com uma porcariazinha…
Funcionou perfeito…
Cara se precisar de mim pra qualquer coisa estamos ai…
Só não consegui entender direito o seguinte…
Eu substitui aquele Trhead.Sleep por um simples for(int i=0;int<1000;i++)
Mesmo assim cara ele dá errado… Parece que pula uma linha de execução…
Más do seu jeito deu perfeito…
ViniGodoy
Você tem que entender que o seu código está rodando na thread da AWT. Qualquer comando que gere delay (seja o for ou o sleep) irá parar essa thread, que não processará os eventos de pintura.
Se você, por exemplo, rodasse uma consulta num BD que demorasse meia hora, a tela ficaria meia hora “congelada”, por mais que no meio do caminho você colocasse comandos para atualizar um status bar.
O que eu fiz foi simplesmente fazer outra thread esperar um segundo. Enquanto isso, a thread da AWT fica livre para processar os eventos e pintar a sua mensagem de texto. Depois de um segundo, eu peço para a outra thread requisitar a AWT que limpe as mensagens de texto (usando o InvokeLater).
oi vini , to tentando aprender um pouco sobre thread e tava dando uma olhada no seu codigo , to com uma duvida , vc criou um action performed em cima do JText q tava dentro da classe q o cara criou extendendo a JFrame neh ?
eu posso usar esse esquema qdo desejo checar um determinado componente da AWT periodicamente???
no caso eu tenho uma classe soh de actionperformed , posso inserir esse nela e add ela ao componente q eu quero checar?
sei q ta parecendo meio confuso , mas eh PQ EU TO MEIO CONFUSO hahahahahahah,
brigadao!!!
ViniGodoy
Oi.
Para verificar o valor de um componente, geralmente usamos um listener ao invés de threads. Você pode usar um evento (como ActionPerformed ou ValueChanged) para que o componente te informe toda vez que seu valor for alterado, assim você não precisa recorrer a threads e nem a pooling.
A técnica para fazer isso com threads é muito parecida, mas você só deve recorrer a ela se for estritamente necessária. Como você só vai ler valores, não tem stress com a fila de mensagens da AWT. Você pode conferir alguns exemplos do uso de threads nesse tópico: