GUI e ciclo infinito

Boas pessoal, agradecia mesmo que me ajudassem nesta :slight_smile:
Ora bem, tenho uma estrutura cliente/servidor. O servidor já se encontra feito e tenho de fazer o cliente para se ajustar a ele.

O meu cliente tem uma GUI que se actualizará de acordo com os dados recebidos do servidor (é um simulador)… O meu problema está que o servidor, a partir do momento que um cliente se regista está constantemente a enviar mensagens ao cliente, as quais o cliente só deve responder se a simulação começar (t>=1) entretanto enquanto n começar o cliente recebe t=0…t=0…t=0…t=0… O problema está aqui…
Quando o cliente se regista no servidor, a GUI congela e não consigo perceber o problema… ora bem, o código está organizado mais ou menos assim:

  • Cliente cria uma ClienteGUI
  • ClienteGUI chama o metodo ligar() no Cliente
  • ligar() tem um enviaInfo() e um recebeInfo()
  • ligar faz (em ciclo infinito):
    • recebeInfo()
      se (t>=1)
      enviaInfo();
      updateGUI();

Como o Servidor está sempre a enviar info… Ele n sai daqui, mas isso era de esperar. O que eu não estava à espera é que a GUI me parasse :frowning:

Abração pessoal, e obrigadão já agora …

Dinis.

Ola, Dinis.
Seguinte, sugiro que você utilize o pattern Observer. Assim, você não precisa ficar lendo infinitamente os dados do servidor.
Implementando este pattern, vai ocorrer que o cliente se registra no servidor e o servidor guarda uma lista de clientes registrados.
Seu cliente terá um método Notify(), por exemplo.
Assim, quando o servidor precisar avisar o cliente (por exemplo quando o t &gt 0), então ele (servidor) irá percorrer a sua lista de clientes, e para cada um, chamar o método Notify().
Desta maneira, o seu cliente só será notificado e não precisará ficar em loop infinito e congelado, além de diminuir o tráfego de dados na rede.
O seu cliente pode implementar uma interface por exemplo Observer. Assim você pode ter clientes com implementações diferentes no método Notify(), que terá sua especificação na interface.

Compreendeu ?

Abraço !

pois :slight_smile: a ideia está boa, o problema aqui é que eu só estou fazendo o Cliente… o Servidor já se encontra implementado e este é seu modo de funcionamento, infelizmente nao há volta a dar :frowning:

Será que se colocar o ActionListener numa Thread isto funcionará?.. Mas se calhar essa thread ficará depois também bloqueada … não bloqueia a GUI bloqueia o Listener bahhhh… Não consigo ter nenhuma ideia…
Parece que terei de remodelar o código todo e colocar todas as comunicações numa Thread à parte :frowning:

Se alguém tiver uma ideia… agradeço …

Brigadão ai pessoal!