Programa bloqueia a thread da interface gráfica [RESOLVIDO]

galera… tenho um problema…
fiz dois programinhas pra chat… um servidor e outro cliente.
Quando eu clico no botão conectar, lança um método que fica em um while esperando o cliente digitar alguma coisa, e fica aguardando… só que com isso, o programa pára, e não acontece mais nada… a interface gráfica dá pau… acho que essa thread tá bloqueando a thread do gui… quer dizer… será que eu deveria deixar essa parte do programa (do while) em uma thread separada?

Hmmm, acho que tem algo estranho aí…

Bem, a princípio, é sim seu laço bloqueando tudo aí, então se vc colocar numa thread separada tudo certo.

Mas já existe uma thread separada para esses eventos do teclado, e o que você precisa fazer na verdade é jogar fora seu laço while e implementar a interface KeyListener, que quando houver um evento do teclado, será chamada pra fazer alguma coisa.

Flw

o código a que eu me refiro é este:

[code]
while ( !done ) {
if( in.hasNextLine() ) {
String line = in.nextLine();
String msgServer = "CLIENT: ";
if (line.trim().equals(“BYE”)) {
done = true;
conectado = false;
}
jTextArea1.append(msgServer + line + “\n” );
}

} [/code]

acho que ele fica passando o while pra sempre… no cliente está o mesmo código… daí eu não consigo conectar nenhum dos dois… logo sempre vai dar esse loop infinito

ainda estou com a dúvida… agora vou disponibilizar os arquivos para quem quiser dar uma olhada… O problema é na interface gráfica, porque eu fiz essse programa pra modo texto e tudo funcionou perfeitamente…

Lmebrando que vocês tem que abrir o programa no netbeans, poruqe usa o layout do netbeans

Nao olhei teu codigo, mas voce possivelmente esta bloqueando (ou executando uma tarefa pesada nao-GUI) na thread EventDispatcherThead (nao lembro se eh esse o nome), a thread que controla os eventos do Swing.

  • Realize tarefas demoradas (ou que bloqueiam) nao-GUI em threads separadas.
  • Atualize a GUI apenas na thread EDT.
  • Da uma olhada nos metodos invokeAndWait e invokeLater do SwingUtilities.
  • Procure por “Swing Worker” na internet (esse projeto tem uma implementacao desse “pattern”: https://swingworker.dev.java.net)

Marcio Kuchma

é isso mesmo cara.
como só existia uma thread, quando o servidor inciava ele esperava uma conexão, ele bloqueava a thread do swing, daí o que eu fiz foi colcar a parte para se conectar em uma thread, daí ficou tudo bem.

Se alguém quiser é só pedir que eu disponibilizo o código