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