Programa bloqueia a thread da interface gráfica [RESOLVIDO]  XML
Índice dos Fóruns » Interface Gráfica
Autor Mensagem
andreiribas
JavaEvangelist
[Avatar]

Membro desde: 30/04/2006 10:43:13
Mensagens: 478
Localização: Curitiba - PR
Offline

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?

SCJP 6.0
OCE JSP and Servlet Developer, JEE 6
[MSN]
dudaskank
GUJ Ranger
[Avatar]
Membro desde: 12/09/2003 14:59:26
Mensagens: 850
Localização: Suzano, SP, Brasil
Offline

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

Eduardo Oliveira

Toque a balada do amor inabalável, eterna love song de nós dois...

Página
[WWW]
andreiribas
JavaEvangelist
[Avatar]

Membro desde: 30/04/2006 10:43:13
Mensagens: 478
Localização: Curitiba - PR
Offline

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


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

SCJP 6.0
OCE JSP and Servlet Developer, JEE 6
[MSN]
andreiribas
JavaEvangelist
[Avatar]

Membro desde: 30/04/2006 10:43:13
Mensagens: 478
Localização: Curitiba - PR
Offline

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



 Nome do arquivo SocketClient1.java [Disk] Download
 Descrição O arquivo do servidor
 Tamanho 11 Kbytes
 Baixado:  154 vez(es)

 Nome do arquivo Configuracoes.java [Disk] Download
 Descrição arquivo de configurações para o programa
 Tamanho 7 Kbytes
 Baixado:  132 vez(es)

 Nome do arquivo SocketServer1.java [Disk] Download
 Descrição O arquivo do cliente
 Tamanho 11 Kbytes
 Baixado:  156 vez(es)


SCJP 6.0
OCE JSP and Servlet Developer, JEE 6
[MSN]
kuchma
Moderador
[Avatar]

Membro desde: 17/01/2003 19:36:16
Mensagens: 1231
Localização: Curitiba - PR
Offline

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

E tu, Belém-Efrata, pequena demais para figurar como grupo de milhares de Judá, de ti me sairá o que há de reinar em Israel, e cujas origens são desde os tempos antigos, desde os dias da eternidade. Mq 5:2, Miquéias, 750 AC aprox.
[WWW] [ICQ]
andreiribas
JavaEvangelist
[Avatar]

Membro desde: 30/04/2006 10:43:13
Mensagens: 478
Localização: Curitiba - PR
Offline

é 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

SCJP 6.0
OCE JSP and Servlet Developer, JEE 6
[MSN]
 
Índice dos Fóruns » Interface Gráfica
Ir para:   
Powered by JForum 2.1.8 © JForum Team