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.

> Ricardo Santos wrote:
> 
> Caros Colegas da Lista,
> 
> n�o estou conseguindo realizar uma tarefa que ao meu ver parece simples.
> A descri��o do problema � a seginte:
> 
> Neste c�digo descrito abaixo, quando o meu m�todo GenerateImage � chamado, ele
> chama o m�todo repaint(), o qual � executado n vezes. A fun��o deste m�todo �
> gerar v�rias imagens na tela do meu software de forma que o usu�rio possa ver
> as imagens uma a uma durante a gera��o das mesmas. Estas imagens, em conjunto,
> ir�o formar uma anima��o. Por�m, o que est� acontecendo � que ao inv�s de
> executar um repaint de cada imagem o meu programa s� exibe ao usu�rio o �ltimo
> frame. � como se ele estivesse executando o loop sem esperar pela gera��o das
> imagens.
> 
> A minha d�vida � como sequenciar o meu loop de maneira que eu consiga
> visualizar todos os frames.
> 
> 
> class Main{
>      ImageGenerator Image = new ImageGenerator( );
>      ............
>      for( frame=1 ; frame<10 ; frame++ )
>      {
>               Image.GenerateImage(frame);
>               Texture.Animation(frame);
>      }
> }
> 
> class ImageGenerator extends Canvas{
>      ImageGenerator( )
>      {
>      }
> 
>      GenerateImage(int frame)
>      {
>           //here is the problem. The repaint( ) method is called but not
>           //executed, excepted when (frame==10) (the last frame of the
> animation)
>           repaint( );
>      }
>      paint( )
>      {
>               //generate each MxN pixels of the image
>              //print then on the screen
>              //save then on a matrix wich will be saved to a file
>      }
> }
> 
> Obrigado pela ajuda.
> 
> Ricardo.

-- 


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 nao receber mais e-mails da lista, acesse 
<http://www.sun.com.br:8080/guest/RemoteAvailableLists>, coloque seu e-mail, escolha a 
lista <[EMAIL PROTECTED]> e de um <submit>.

Responder a