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???
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???
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.
Mas como eu faço isso? vc poderia me enviar um exemplo?
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("");
}
}