Thread travando tela

2 respostas
L

Olá
Eu estou fazendo uma aplicação e eu queria fazer o seguinte
Criar um campo de pesquisa que o usuário digita e a aplicação faz a consulta enquanto ele escreve
Sem apertar enter nem clicar em nenhum botão

Pra aplicação não ficar muito pesada eu quero implementar um KeyListenner que conte um delay de 2 segundos(por exemplo) pra fazer a pesquisa. Quando o usuário começar a digitar ele começa a contar os 2 segundos e sempre que ele apertar um botão recomeça a contar o delay do 0.
Então a aplicação so vai executar a pesquisa se o usuário parar de digitar por 2 segundos

Eu criei a Thread abaixo so pra teste
Quando o usuário começa a digitar ele vai chamar o metodo run.
Sempre que uma tecla for pressionada ele vai chamar setTempo(0);

O problema é que quando eu chamo o método run a tela trava

public class SearchDelay implements Runnable {

        private int tempo = 0;

        public void run() {
            try {
                while (tempo <= 2) {
                    System.out.println("Tempo: " + tempo);
                    Thread.sleep(1000);
                    tempo++;
                }
                tempo = 0;
                System.out.println("Fim");
            } catch (InterruptedException ex) {
                Logger.getLogger(TesteJFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        public int getTempo() {
            return tempo;
        }

        public void setTempo(int tempo) {
            this.tempo = tempo;
        }
    }

2 Respostas

P

Cara, vc tá usando a classe Thread para chamar sua classe ? c vc estiver usando direto o método run não funciona como nova Thread!

//Tem que usar assim..
Thread t = new Thread( new SearchDelay() );
t.start();
//Se tiver usando assim tá errado:
SearchDelayt s = new SearchDelay();
s.run();
L

Valeu!
Tava so usando o bagulho do jeito errado mesmo.

Criado 2 de dezembro de 2010
Ultima resposta 3 de dez. de 2010
Respostas 2
Participantes 2