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>.