Delay com Swing! Labirinto!

I aí pessoal do fórum, tudo bem aí com todo mundo?!

Estou com um problema aqui. Fiz uma minuscula aplicaçãzinha utilizando JAVA, Swing e XML cuja finalidade é simular um labirinto.
Eu coloquei vários JPanels para simular os quadradinhos do labirinto e pintar onde o personagem pode passar ou não.
O problema é que quando eu mando ele ir do início do labirinto até o final, pintando os quadrados por onde ele vai passando, eu utilizo um for para isso, eu uso um delay. Mas ele não vai pintando de um a um. Ele trava a aplicação durante o delay, e depois já aparece na última posição.

Esse meu for está no main da aplicação, e dentro dele eu coloco Thread.sleep(1000);

   for (condição) {
        shapeAtual.pintar("branco");
        shape = null;
        shape = new JPanel();
        shape = shapeAtual.next();
        shape.pintar("azul");
        Thread.sleep(500);
   }

Como eu disse, ele trava a aplicação durante o for, e depois disso ele volta mais o objeto já está no final do labirinto.

Minha dúvida é como fazer esse delay e ele ir mostrando e dando repaint por onde vai passando, de forma que o usuário possa ver cada um dos quadradinhos sendo pintando.

Pessoal, acho que minha dúvida é básica. Mais eu não estou achando uma forma de corrigir esse meu erro. Já procurei no google algumas soluções, mas acaba travando do mesmo jeito.

Se puderem me ajudar, ficarei muito agradecido.

Atenciosamente,

Júnior

.

Opa! e ai, blz?

kra… tenta sincronizar seu shape e use o metodo wait…

tipo assim:

synchronized (shape) { for (condição) { shapeAtual.pintar("branco"); shape = null; shape = new JPanel(); shape = shapeAtual.next(); shape.pintar("azul"); shape.wait(); } }

num tenho certeza não, mas acho que isso deve funcionar…

falows… :wink:

[]s e t+…

Olá Elison, tudo bem? Muito obrigado pela resposta, tentei aqui mais acabou não funcionando. Mesmo com o for, ele parece que aguarda todo o tempo do delay e após esse tempo, ele pinta a última posição. Não vai indo um a um como eu quero que vá.
Implementei o seu código desta forma:

       if (arrayFindTail != null && arrayFindTail.size() > 0) {
            int valorFinal = arrayFindTail.size();
            
            synchronized (noAtual) {
                for (int i = 0; i < valorFinal; i++) {
                    Node noAux = new Node();
                    noAux = ((Node)arrayFindTail.get(i));
                    noAtual.setCorNode(null);
                    noAtual = null;
                    noAtual = new Node();
                    noAtual = noAux;
                    noAtual.setCorNode(caminhoImagemPontoInicial);
                    try {
                        noAtual.wait();
                    } catch(Exception e) {
                        e.printStackTrace();
                    }
                }
            }
       }
 Tentei fazer desta forma também:
            for (int i = 0; i < valorFinal; i++) {
                Node noAux = new Node();
                noAux = ((Node)arrayFindTail.get(i));
                 
                noAtual.setCorNode(null);
                noAtual = null;
                noAtual = new Node();
                noAtual = noAux;
                 
                noAtual.setCorNode(caminhoImagemPontoInicial);
                noAtual.repaint();

                try {
                    Thread.currentThread().sleep(15);
                } catch(Exception e) {
                    e.printStackTrace();
                }
            }

Mas também acabou acontecendo a mesma coisa.
Não sei o que pode estar acontecendo, o que eu estou fazendo de errado, mas gostaria da ajuda de vocês.

Apenas explicando, o arrayFindTail é o array que contem o caminho para o final do labirinto. Ele é gerado a partir de uma função recursiva e minha referência para ir pintando o caminho até o final.

Valeu galera do fórum…

Abraços a todos.

Júnior…