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/

Responder a