Ajuda com Algorítmo por favor[RESOLVIDO]

Por favor galera, tenho uma dúvida sobre meu programa, tenho um programa com várias internal frames.
eu estou simulando a chegada de veículos em um lugar através de informações vindas de socket, até aí tudo vem, meu frame principal faz o papel de receber as informações, porém eu gostaria que essas informações fossem apresentadas dentro de uma internal frame que eu tenho, não sei como passar esses valores, ja usei ArrayList estática e não funcionou, atualmente eu estava usando txt.
Eu pegava os dados via socket, gravava no txt e na hora que eu abria meu internal frame que monitorava eu lia o txt, o problema que isso deve ser um tempo real, e faz um Thread gravar informações enquanto o outro está lendo, chega uma hora que um tenta ler ao mesmo tempo que o outro grava, aí da pau no programa e sai.
Por favor, alguem tem uma ideia de como eu fazer que as informações que estão chegando no frame principal sejam passadas para a InternalFrame em tempo real?

Muito obrigado.

Hao!

Sem nenhum código fica muito dificil dar uma ajuda mais direta, bom, de qualquer maneira segue uma idéia:

  • Você disse que tem uma classe que recebe os dados vindos de socket. O “pulo do gato” está nela, vc pode criar um “Observer”, fazendo com que a chegar os dados, você dispare eventos através de listeners.

Basicamente seria assim.

Crie uma interface:
DadosListener com o metodo chegouDados(DadosEvent e)

Crie uma classe que representa os dados que deseja mostrar. Por ex:

public class DadosEvent {
  String dado;
  public DadosEvent(String dado) {
     this.dado = dado;
  }
}

Na classe do socket vc vai gerar o evento com os dados. Por exemplo:

public class ClasseQueRecebeDados {
   
private List dadosListener = new ArrayList();

public void addDadosListener(DadosListener dl) {
   dadosListener.add(dl);
}

public void removeDadosListener(DadosListener dl) {
   dadosListener.remove(dl);
}

protected void fireDadosListener(DadosEvent e) {
   for (DadosListener dl : dadosListener) {
      dl.chegouDados(e);
   }
}

public void metodoQueRecebeDadosViaSocket() {
   
   //recebe os dados aqui

   //no final gera o evento avisando que chegou os dados
   DadosEvent e = new DadosEvent("teste");
   fireDadosListener(e);
}

E por último, no JFrame você assina o evento:


  //dentro da classe do JFrame
  ClasseQueRecebeDados recebeDados;    //classe q recebe dados via socket

  //seu listener q recebe o aviso de novos dados
  private DadosListener dadosListener = new DadosListener() {
        public void chegouDados(DadosEvent e) {
            //aqui vc atualiza os componentes do form com os dados
            //o dado está no parametro e
            System.out.println(e.dado);
        }
  }

  //no construtor por exemplo vc assina o servico
  recebeDados.addDadosListener(dadosListener);

Provavelmente tem erro no código pois digitei tudo agora, mas para ter uma idéia do que tem que se feito tá mais que bom neh !

Espero ter ajudado.

Roger Leite

humm, muito obrigado pela ajuda Roger, porém nunca usei observers, não entendi direito como funciona, será que você teria algum link explicativo sobre isso pls?

Obrigado.

Dá uma lida aqui

T+

[quote=diego2005]Dá uma lida aqui

T+[/quote]

Cara, matou a pau, era isso mesmo, valeu mesmo cara.

[]´s