Charles,
acabei de responder um problema similar a esse na outra lista,
e estou copiando aqui a reposta. Observe que o problema respondido
eh um problema de imagens, mas no seu caso, voce esta prendendo
o thread da GUI com a leitura de arquivos. A resposta eh a mesma.
Abracos,
Bruno.
(segue abaixo a resposta)
Subject: Re: Problemas com o Repaint.
Date: Tue, 26 Oct 1999 10:50:34 -0300
From: "Bruno Souza (Sun Microsystems)" <[EMAIL PROTECTED]>
To: Ricardo Santos <[EMAIL PROTECTED]>
CC: Lista Java <[EMAIL PROTECTED]>
References: <002801bf1f9d$8e43d580$[EMAIL PROTECTED]>
O seu problema eh uma combinacao de varias coisas.
Primeiro, como o loop do seu programa nao executa em um thread separado,
nao existe a possibilidade do thread da GUI (que eh de baixa prioridade)
fazer qualquer coisa.
Alem disso, o metodo repaint() nao causa um repaint imediato. Apenas
indica para o thread da GUI que um repaint eh necessario. Isso acontece
para permitir com que varias chamadas do repaint que sejam feitas durante
o tempo em que o thread da GUI esta aguardando seu tempo para executar
sejam convertidos em uma unica chamada, ou entao a sua GUI, ao ter o
controle da CPU, faria dezenas de repaints desnecessarios (essa eh a
umas das razoes de voce chamar "repaint()" e nao "paint()"). Na verdade,
voce esta chamando o "repaint()" 10 vezes, isso nao esta errado, so
que o seu programa so faz um unico repaint, o que esta perfeitamente
correto.
Isso dito, o seu problema so se soluciona se voce criar um novo thread
para tratar da sua animacao. Nesse caso, o seu theead cuida de fazer a
animacao, deixando o thread da GUI livre para continuar a desenha a GUI.
BTW, essa eh a mesma reposta para a pergunta sobre leitura de arquivo
enviada pelo Charles e pelo Thiago, so que no caso deles eles estao
prendendo o thread da GUI com a leitura do arquivo.
No caso especifico do tratamento de imagens, antes de fazer a sua
propria animacao, voce deveira aprender com o exemplo classico do
Applet Animator. Voce encontra o codigo no diretorio "demos" da
instalacao do seu JDK. No caso do JDK 1.2, esta em:
<install_dir>\demo\applets\Animator\Animator.java
Nessa classe, observe o objeto Thread, como ele eh usado. Observe tambem
o metodo "run()" que eh o metodo executado pelo Thread.
Caso voce precise, no Java Tutorial existem as licoes sobre Threads em:
http://java.sun.com/docs/books/tutorial/essential/threads/index.html
Abracos,
Bruno.
> Charles Pereira wrote:
>
> Ol� Pessoal!
>
> Estou enfrentando um problema que achei um pouco estranho.
>
> Implementei uma classe que l� um arquivo texto linha por linha e faz alguns
> processamentos. Foi criada uma classe derivada de um JFrame, que mostra em uma
> �rea de texto o que est� sendo lido e mostra uma barra de progresso indicando
> a porcentagem do arquivo que j� foi lida. At� aqui tudo bem. Fiz um teste
> atrav�s de uma classe simples apenas com o m�todo main. Funciona
> perfeitamente.
>
> O problema ocorre quando eu uso essas classes com um JFrame. Este JFrame
> possui v�rios JButtons e um deles � respons�vel por abrir uma caixa de di�logo
> para escolher o arquivo que vai ser lido. Ent�o este arquivo � passado como
> par�mentro para a classe respons�vel pela leitura do arquivo e esta ativa o
> outro JFrame que vai mostrar o processo. Acontece que nem a �rea de texto e a
> barra de progresso s�o atualizadas. Isso s� acontece quando todo arquivo j�
> foi lido.
>
> Algu�m poderia me ajudar?
>
> Agrade�o antecipadamente,
>
> Charles Pereira
--
Bruno.
______________________________________________________________________
Bruno Peres Ferreira de Souza Sun Microsystems
System Engineer - Java Technologist [EMAIL PROTECTED]
if I fail, if I succeed, at least I live as I believe
* Para n�o receber mais e-mails desta lista envie um e-mail para
[[EMAIL PROTECTED]]
e no corpo do email escreva [unsubscribe <seu-email>]
Veja as mensagens antigas em http://www.mail-archive.com/javabr%40cits.br/