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

S

se eu entendi o que quer é cada textArea ser dedicado a um serviço (servidor e cliente).

eu faria uma aplicação só, e estancio as 2 threads uma pra cliente outra pra servidor, então teria uma tela com 2 botoes (um para iniciar cada serviço) e 2 textarea, de forma que ao iniciar o servidor eu já sei qual o textarea que vai ser usado por ele, ele simplesmente vai la e escreve o log a mesma coisa com o cliente.

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