comunicação entre classes

1 resposta
J

Pessoal

Tive que fazer, para a faculdade, uma aplicação que se conecte a outro computador na mesma rede (utilizando a mesma aplicação) por sockets e possa enviar ou receber arquivos.

Até aí, tudo bem, criei as classes:

Servidor
Cliente
Execucao

Servidor, é responsável por receber os arquivos, Cliente é responsável por enviar os arquivos e Execucao é o que faz a aplicação rodar.

Tudo funcionou perfeitamente.

Depois disto, criei um JFrame, para que a aplicação rodasse em um ambiente gráfico , e aí começou a minha dúvida. É o seguinte:

O Servidor roda em uma Thread separada. O cliente, ao conectar no Servidor, roda em outra Thread separada. Cada ação que acontece (conexão efetuada, arquivo enviado, arquivo recebido, …) é impressa na tela, como log dos acontecimentos.

Já com um JFrame, tenho 2 textarea’s (a pedido do professor). Um, que será responsável pelos logs do Servidor e outro, do Cliente. Criei a classe Principal, que extende JFrame e, assim como a Executa, tem um objeto do tipo Servidor e outro do tipo Cliente. Minha maior dúvida é, como fazer com que os logs de Servidor e Cliente, sejam impressos no seu devido textarea, da classe Principal, já que esses logs não são retorno de nenhum método e podem ocorrer vários em um mesmo método.

Temporariamente, ao instanciar Servidor e Cliente, passei o objeto Principal como argumento, pro construtor, porém, sei que isto é horrível! hehehe

Um exemplo rápido:

class Servidor implements Runnable{
   Principal p;
   Servidor(Principal p){
      this.p = p;
   }
   public void run(){
      p.addLogServidor("msg log 1");
      p.addLogServidor("msg log 1");
   }
}

class Principal extends JFrame{
   Servidor s;
   Principal(){
      servidor = new Servidor(this);
   }
}

Qual seria a melhor forma de fazer isto?

Espero ter sido claro.

Grato

Julio Romano

1 Resposta

nbluis

Estude sobre o Pattern Observer.

Até.

Criado 24 de abril de 2008
Ultima resposta 24 de abr. de 2008
Respostas 1
Participantes 2