JLabel

6 respostas
igor_jua

Galera…estou aqui com mais uma dúvida.
Estou utilizando alguns arquivos de imagem .gif. Estes arquivos são gifs animados qu funcionam da seguinte maneira:
Ao clicar num botão método muda a imagem atual do jlabel setando o gif animado e vai fazer o resto do procedimento.
Porém nada acontece no meu JFrame, ou seja, no JFrame continua a imagem que estava anteriormente.
Ao final do método eu abro um JOptionPane informando que o processo foi concluído e só aí que a figura animada vem aparecer…

Como fazer para que esta aparece desde o inicio do processo???
Segue meu Código.

//estou trabalhando com sockets
ImageIcon image = new ImageIcon(getClass().getResource("/Imagens/com0101.gif"));//a imagem esta dentro do source do meu projeto
        jLabel21.setIcon(image);
        jLabel21.getUI().update(jLabel21.getGraphics(), jLabel21);
      Cliente c = new Cliente();//classe socket que faz conexao com um servidor
        InetAddress localaddr = null;
        int contador=0;
            try {
                localaddr = InetAddress.getLocalHost();//busca os dados de rede do pc/ fiz isso pra pegar o ip da estação
            } catch (UnknownHostException ex) {
                System.out.println(ex.toString());
            }
//BEM, A ESTA ALTURA A IMAGEM JÁ DEVERIA APARECER, MAS AINDA CONTINUA COM A IMAGEM ANTERIOR A INSERIDA.
        ArquivoEnvio ae = new ArquivoEnvio(a.getArquivoConfig().getIpServidor(), localaddr.getHostAddress(), null, null);//classe que implementa Serializible para envio de dados
       boolean r = false;
        do {
            try {
                r = c.verificaServidorLigado(ae);
                if(r){
                    vsl.setStatusServidor(true);
                vsl.start();
                }
            } 
            catch (SocketException ex) {
                if(ex instanceof ConnectException){
//SOMENTE QUANDO ELE ENTRA AQUI , A IMAGEM ANIMADA APARECE.
                    JOptionPane.showMessageDialog(this, "O servidor encontra-se desligado!\nEntre em contato com a central!", "SRR", JOptionPane.WARNING_MESSAGE);
                    break;
                }else{
               System.out.println("porta oculpada");
               Thread.sleep(1000);
}} while (!r);

6 Respostas

P

Acho que tem duas possibilidades, o swing atualiza só depois de toda ação ser executada.

Aqui tem como fazer pra colocar uma thread rodar ao mesmo tempo que executa.

http://www.java2s.com/Code/Java/Threads/InvokeExampleSwingandthread.htm

Tenta antes colocar o this.validade do JFrame pode funcionar.

ViniGodoy

Esse código está rodando em outra thread, ou está na thread do Swing? Se estiver na thread do Swing (diretamente dentro do listener de um botão, por exemplo), não vai atualizar mesmo.

igor_jua

Não vini, esta rodando em uma outra Thread a qual é startada dentro de um listener.
O problema agora é que uma imagem fica sobre a outra.

ViniGodoy

Se está em outra thread, onde está as chamadas à eventQueue.invokeLater na hora de atualizar a label?

EventQueue.invokeLater() { public void run() { jLabel21.setIcon(image); jLabel21.getUI().update(jLabel21.getGraphics(), jLabel21); } });

igor_jua

Vou postar meu novo código.

public void modificarFigura1() {

        ImageIcon image = new ImageIcon(getClass().getResource("/Imagens/com0101.gif"));
        jLabel21.setIcon(image);
        jLabel21.getUI().update(jLabel21.getGraphics(), jLabel21);
       jLabel21.repaint();
    }

    public void modificarFigura2() {
        ImageIcon image = new ImageIcon(getClass().getResource("/Imagens/7168_128x128.png"));
        jLabel21.setIcon(image);
      
    }

    class Figura extends Thread {

        boolean bloq = false;

        public void run() {
             boolean pas = false;
                    while (bloq) {
                        if (!pas) {
                            modificarFigura1();
                            pas = true;
                        }
                        try {
                            Thread.sleep(200);
                        } catch (InterruptedException ex) {
                            Logger.getLogger(FrameClientes.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                    modificarFigura2();


        }
    }

// dentro do meu listener eu tenho o seguinte

Figura f = new Figura();
        f.bloq = true;
        f.start();
Cliente c = new Cliente();//classe socket que faz conexao com um servidor   
        InetAddress localaddr = null;   
        int contador=0;   
            try {   
                localaddr = InetAddress.getLocalHost();//busca os dados de rede do pc/ fiz isso pra pegar o ip da estação   
            } catch (UnknownHostException ex) {   
                System.out.println(ex.toString());   
            }   
//BEM, A ESTA ALTURA A IMAGEM JÁ DEVERIA APARECER, MAS AINDA CONTINUA COM A IMAGEM ANTERIOR A INSERIDA.   
        ArquivoEnvio ae = new ArquivoEnvio(a.getArquivoConfig().getIpServidor(), localaddr.getHostAddress(), null, null);//classe que implementa Serializible para envio de dados   
       boolean r = false;   
        do {   
            try {   
                r = c.verificaServidorLigado(ae);   
                if(r){   
                    vsl.setStatusServidor(true);   
                vsl.start();   
                }   
            }   
            catch (SocketException ex) {   
                if(ex instanceof ConnectException){   
//SOMENTE QUANDO ELE ENTRA AQUI , A IMAGEM ANIMADA APARECE.   
                    JOptionPane.showMessageDialog(this, "O servidor encontra-se desligado!\nEntre em contato com a central!", "SRR", JOptionPane.WARNING_MESSAGE);   
                    break;   
                }else{   
               System.out.println("porta oculpada");   
               Thread.sleep(1000);   
}} while (!r);  
//estou trabalhando com sockets
ImageIcon image = new ImageIcon(getClass().getResource("/Imagens/com0101.gif"));//a imagem esta dentro do source do meu projeto
        jLabel21.setIcon(image);
        jLabel21.getUI().update(jLabel21.getGraphics(), jLabel21);
      Cliente c = new Cliente();//classe socket que faz conexao com um servidor
        InetAddress localaddr = null;
        int contador=0;
            try {
                localaddr = InetAddress.getLocalHost();//busca os dados de rede do pc/ fiz isso pra pegar o ip da estação
            } catch (UnknownHostException ex) {
                System.out.println(ex.toString());
            }
//BEM, A ESTA ALTURA A IMAGEM JÁ DEVERIA APARECER, MAS AINDA CONTINUA COM A IMAGEM ANTERIOR A INSERIDA.
        ArquivoEnvio ae = new ArquivoEnvio(a.getArquivoConfig().getIpServidor(), localaddr.getHostAddress(), null, null);//classe que implementa Serializible para envio de dados
       boolean r = false;
        do {
            try {
                r = c.verificaServidorLigado(ae);
                if(r){
                    vsl.setStatusServidor(true);
                vsl.start();
                }
            } 
            catch (SocketException ex) {
                if(ex instanceof ConnectException){
//SOMENTE QUANDO ELE ENTRA AQUI , A IMAGEM ANIMADA APARECE.
                    JOptionPane.showMessageDialog(this, "O servidor encontra-se desligado!\nEntre em contato com a central!", "SRR", JOptionPane.WARNING_MESSAGE);
                    break;
                }else{
               System.out.println("porta oculpada");
               Thread.sleep(1000);
}} while (!r);
igor_jua

iai…ninguem tem uma luz??

Criado 28 de julho de 2010
Ultima resposta 28 de jul. de 2010
Respostas 6
Participantes 3