Thread acessando objetos intanciados de outra Thread

Pessoal estou com um problema não sei como resolver.
Estou fazendo um sistema utilizando Swing.
Estou criando a tela bonitinho, só que esse sistema ira ter comunicação via Socket.

Criei uma Thread separada para receber as mensagens através do socket porém quando recebo essa mensagem eu preciso executar um método que esta na Thread em que minha tela foi criada é possível fazer isso?


public class ClientSocket extends  Thread
{
    private Socket client;

    public ClientSocket(Socket s)
    {
        client = s;
    }

    @Override
    public void run()
    {
        byte buffer[] = new byte[1000];
        String conteudo;
        int control;
        DataInputStream dataInputStream;

        boolean reading;

        reading = true;

        try
        {
            while(reading)
            {
                dataInputStream = new DataInputStream(client.getInputStream());

                control = dataInputStream.read(buffer);

                conteudo = new String(buffer).trim();
                
                System.out.println("Chegou isso:" + conteudo);

                //Chamar método da outra Thread(Principal) passando o conteudo
            }

            client.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            System.exit(1);
        }
    }
}

SIM… Pelo que eu entendi, é só você instanciar a sua thread na sua tela principal e ao instanciar vc passar a referencia da sua classe (tela principal) no construtor da sua thread cliente,
exemplo:

 public ClientSocket(Socket s, ClassePrincipal c)  
     {  
         client = s;  
          c. = c;
} 

Ai caso você precise chamar algum método da sua classe principal é só invocar o metodo…

Os métodos não estão em “threads”. Método estão em classes, e classes são percorridas por threads.
Duas threads podem, ao mesmo tempo, percorrer o mesmo objeto, da mesma classe. É aí que entra a necessidade de sincronização.

Como o colega falou, se você quer que sua classe ClientSocket chame um método de outra classe, você precisará passar a outra classe como parâmetro.

Cara,

Tenta usar o padrão Observable http://www.guj.com.br/article.show.logic?id=47 assim a sua thread de comunicação envia uma notificação p/ um objeto que executaria o método da thread principal.

[]'s

Luiz Renato

Eu geralmente implemento esse tipo de comunicação através do padrão observer.

Outra opção é criar também uma fila de mensagem entre as threads.

Obrigado pessoal vou tentar implementar este observer

Só um detalhe. A API do Java chama o Observer de Listener.