Tela distorcida - swing

To com um problema muito estranho.
Estou fazendo um programa tipo msn. Daí abro um cliente (tela) e quando vai exibir a lista de contatos a imagem da tela simplesmente não é exibida. Fica aparecendo o eclipse no fundo. Mas não da erro.
Isso ocorre pq logo depois q eu mando exibir a tela eu chamo um método pra ficar escutando mensagens numa determinada porta (via socket). Se eu não chamar esse método, a tela é exibida normalmente.

Alguém faz idéia do que posso fazer?

Desde já, valeu!

Você esta abrindo uma nova Thread para ler o socket?

Não…

Mas o servidor abre uma nova thread para cada cliente.

Será que essa é a solução? Vou tentar!
Valeu!

Certo, mas cada cliente desenha a tela e abre um socket certo? Não sou bom com swing, mas acho que se você ler o socket na mesma Thread que o seu frame, você vai travar ele. Tenta abrir uma Thread nova para ler o socket.

Certo!
Mas como faço pra thread não bloquear o classe que abre o frame?
Pq se faço um método pra escutar, ele tem que fazer in.readObject() (in: ObjectInputStream) e assim bloqueia a thread. E aí, como tive que criar um método na thread pra ler o sokect diferente do run (pq run é void), bloqueia a classe q chamou o frame tbm.
Entendeu?
Não sei trabalhar bem com threads…

Tentei de outro jeito, utilizando só o método run(), mas ele próprio bloqueia a outra classe.
Não sei oq fazer.

Nuhh, acho q deu certo!
Tava chamando run() ao invés de stat(). Desculpe a burrice!
Deve ser pq to há horas mexendo com isso! Não to pensando direito!

Mas de qq forma, valeu! Essa é a solução!

Muito obrigado!
:smiley:

Veja se esses links podem te ajudar:

http://www.ashishmyles.com/tutorials/tcpchat/index.html
http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html#creating_threads

no ultimo menciona que você precisa cirar uma instancia do swing worker para realizar um processamento demorado como IO.