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