[Resolvido]Atualizando um JLabel

11 respostas
P

Bom dia,

é uma dúvida estúpida,

eu quero que meu JLabel fique alternando por duas imagens até quando eu achar necessário.
Por isso coloquei o setTela em um for infinito olhem:

public class ExibeImageMain {
	
	public static void main(String[] args) throws InterruptedException {
		
		ExibeImage passaTela = new ExibeImage();

	
		for(;;){

		passaTela.setTela("telaenviada.jpg");

		Thread.sleep(5000);
		System.out.println("Atualizando tela");
		passaTela.setTela("10557.jpg");
		
	}
	}

}

Código do setaTela

public void setTela(String path){
		
		tela.setIcon(new ImageIcon(path));
		
	}

só que o Label não atualiza, ele atualiza somente com a primeira imagem e não troca mais,
porém quando eu tiro o for dá certo. Alguém sabe qual o problema?

Grato.

11 Respostas

Aldeir

Tenta assim

public static void main(String[] args) throws InterruptedException {  
          
    ExibeImage passaTela = new ExibeImage();  
  
      
    while(true){  
        Thread.sleep(5000); 
        passaTela.setTela("telaenviada.jpg");  
  
        System.out.println("Atualizando tela");  

        Thread.sleep(5000);  
        passaTela.setTela("10557.jpg");  
    }
          
}
Aldeir

para que a label não inicie sem imagem e tenha que esperar 5 segundos até setar a primeira imagem, coloa este trecho antes de iniciar o laço.

P

Obrigado.
Problema resolvido.

Muito grato.

Aldeir

Por nada cara.

P

Olha,

estou com mais um problema. Enquanto estou exibindo uma das imagens,
a outra muda. Só que o label continua sendo setado com a imagem
antiga. Alguma ideia do porque disso?

Aldeir

Não estou vendo o seu código, mas se você quer tirar o que está setado no momento, pode setar com null.

P

O código é o mesmo. Como vc pode ver ele fica alternando o label entre duas imagens com um tempo de 5 segundos.
Enquanto o label exibe a imagem telaenviada.jpg a imagem 10557.jpg mudou. Porém quando o passa os 5 segundos e
o label vai ser setado com ela, a imagem que aparece é a antiga, antes de ser mudada e não a nova.
Entendeu o problema?

Aldeir

Entendi. O que está acontecendo é que duas Threads estão fazendo a alteração. O que pode ser feito, é criar uma classe extendendo a classe Thread e implementar o metodo run, e colocar o seu codigo em uma unica Thread

ViniGodoy

Se quiser ver algo legal, veja esse código:
http://www.guj.com.br/java/128713-jframe-com-imagem-em-fade#1165351

P

Assim não daria certo olhe:

new Thread(){  
                @Override  
                public void run(){  
                	
                	while(true){
                	try {
						Thread.sleep(5000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}  
                	passaTela.setTela("telaenviada.jpg"); 
             
            		System.out.println("Atualizando tela");

                         try {
						Thread.sleep(5000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}  
            		passaTela.setTela("10557.jpg");
                	}
                }  
            }.start();
P

Consegui. Alterei o código da função que seta.
Olhe:

public void setTela(String path){
		
		ImageIcon i1 = new ImageIcon(path);
		Image aux = i1.getImage();
		aux.flush();
		tela.setIcon(new ImageIcon(aux));
		i1 = null;
		
	}

Muito obrigado pela ajuda.

ViniGodoy muito interessante o tópico que você me mostrou.
Irei estudá-lo depois.

Grato a todos.

Criado 11 de novembro de 2012
Ultima resposta 11 de nov. de 2012
Respostas 11
Participantes 3