Gif animado em Jframe

5 respostas
L

Galera sou novo aqui e estou com um problema que não consigo entender. Em meu TCC tenho um frame, dentro deste frame eu tenho um JLabel com um gif animado nela. Eu chamo esse frame entes de chamar um método, dai enquanto esse método é executado, a gif animada indica que esta havendo processamento, só que a gif só aparece quando o método termina seu trabalho. O frame ate aparece enquanto o método é executado mas a gif só aparece quando ele termina. É como se o método que eu chamo depois do frame tivesse mais importância do que a execução da gif que foi chamada primeiro. O que poderia ser?

Abaixo segue o trecho do código:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {

try {

Analisando2 analis = new Analisando2(); // Obeto que contem o frame com a Gif animada.

// a gif tem que aparecer dai pra baixo.

PlanarImage picture = JAI.create(“fileload”, “c:/Imagens/particulas.jpg”);

Imagem um = new Imagem (picture);

um.binarize();

Filtro filtro1 = new Filtro(c:/Outputbin/Binarizada.bmp);

filtro1.Mediana();

filtro1.eliminaBordas();

File file1 = new File(c:/Outputbin/Filtrada2.bmp);

BufferedImage picture2 = ImageIO.read(file1);

Contador cont1 = new Contador(picture2);

quantidade = cont1.contaParticulas();

// a gif só aparece deste ponto em diante

textField1.setText(String.valueOf(quantidade));

jButton3.setEnabled(true);

} catch (IOException ex) {

Logger.getLogger(Teste.class.getName()).log(Level.SEVERE, null, ex);

}

}

public class Analisando2 {

JFrame frame = new JFrame();

public Analisando2(){

Icon ico = new ImageIcon(“icones/xpto.gif”);
JLabel label = new JLabel(ico);

frame.getContentPane().add(label);

frame.setSize(101,101);

frame.setUndecorated(true); // tira a borda superior com os três botões do windows

frame.pack();

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

}

5 Respostas

ViniGodoy

Comece por aqui: http://www.guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor

Isso ocorre porque provavelmente o player do GIF é disparado numa thread secundária.

L

Cara mas eu não estou usando Threads.

ViniGodoy

Não que você tenha disparado diretamente.
Quando você usa o construtor do ImageIcon, ele usar a carga através do MediaTracker, que gerencia uma thread.

Na verdade, é pouco provável que sua aplicação não tenha pelo menos 3 threads rodando. Se você executar no debugger no Netbeans ou do Eclipse, ou no Visual VM, poderá vê-las.

L

Ok, mas vc disse que o gif só está rodando depois que o método termina seu trabalho pq provavelmente ele está rodando em uma thread secundária, mas como eu faço pra ele rodar na thread primaria?

ViniGodoy

Você não poderia. Se você fizer isso, seu método vai travar até o gif parar de rodar, coisa que não acontece.

Criado 6 de janeiro de 2012
Ultima resposta 8 de jan. de 2012
Respostas 5
Participantes 2