Boas pessoal, agradecia mesmo que me ajudassem nesta
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
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 > 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.
pois 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
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