Duvida básica - por favor, me ajudem

3 respostas
allan_net

Estou começando na programação java, e estou passando pelo seguinte problema:

Toda vez que realizo um while() muito grande e depois minimizo a janela, o conteudo do JFrame desepareçe, o que eu faço???

3 Respostas

gcobr

Se o seu while está executando em resposta a um evento da interface, ele está sendo executado dentro do event dispatch thread do Swing. Ou seja, o mesmo thread que trata os eventos de repaint da janela que precisam ser processados a fim de restaurar sua exibição.

Então, como o thread está ocupado processando o seu while gigante, os eventos de repaint ficam na fila até que o seu while acabe e só então a janela será repintada e reexibida corretamente.

Para resolver isso, você precisará executar o seu super while em outro thread de maneira assíncrona, para liberar logo o thread do Swing.

allan_net

Mas como eu faço isso? vc poderia me enviar um exemplo?

renatosilva

Antes de mais nada, é melhor você pegar um livro ou artigo e estudar threads. Mas dando uma idéia:

Crie uma classe que implemente Runnable, e no método run() coloque o código que vai rodar em paralelo (multi-thread).

Crie um objeto Thread e passe seu objeto “rodável” no construtor, então mande a thread iniciar chamando seu start().

Essa classe dá pra você brincar um pouquinho, rode ela várias vezes e veja…

public class Threads {	
	public static void main(String[] args) {		
		Runnable geradorDeUm = new GeradorDeBits(true);
		Runnable geradorDeZero = new GeradorDeBits(false);
				
		Thread threadUm = new Thread(geradorDeUm);
		Thread threadZero = new Thread(geradorDeZero);		
		
		threadUm.start();
		threadZero.start();
	}
}

class GeradorDeBits implements Runnable {	
	private boolean bit;	
	public GeradorDeBits(boolean bit) {	
		this.bit = bit;	
	}		
	public void run() { 
		for (int i = 0; i < 400; i++) {
			comeAlfafa();
			System.out.print(bit? 1 : 0);			
		}
	}		
	private void comeAlfafa(){
		for (int i = 0; i < 10000; i++)	
			System.out.print(""); 
	}
}
Criado 27 de setembro de 2006
Ultima resposta 28 de set. de 2006
Respostas 3
Participantes 3