[RESOLVIDO] Atribuir valor a uma variavel recebida pelo socket

Bom Dia

Pessoal alguem pode me ajudar recebo atraves de um socket um valor atraves do BufferedReader gostaria de atribuir esse valor a uma variavel “msg” para usar em outra classe porém aparentemente ele faz a atribuição normal mas na outra classe ele me retorna “null” segue codigos:

classe q recebe a variavel

[code]import java.io.;
import java.net.
;

public class Cliente{
String msg;
public String getmsg(){
return msg;
}
public void setmsg(String msg){
this.msg = msg;
}

   public void go(){
      
     while (true)
            try{
              
    Socket s = new Socket("127.0.0.1", 2805);
    InputStreamReader streamReader = new InputStreamReader(s.getInputStream());
    BufferedReader reader = new BufferedReader(streamReader);
    msg = reader.readLine();
    System.out.println(msg);
    reader.close();
    if (msg != null){ //Só para testar se estava atribuindo valor
                new sysTray1();
            } else {
                System.out.println("Erro");
            }
    
}
                         
            catch(IOException ex){
                ex.printStackTrace();
}

}
public static void main (String[] args){
Cliente cliente = new Cliente();
//new sysTray1();
cliente.go();

}
}[/code]

Classe q gostaria de usar a variavel:

[code]import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JOptionPane;

/**
*

  • @author douglas.santos
    */
    public class sysTray1 {

    public sysTray1(){
    final Cliente rec = new Cliente();

    final TrayIcon trayIcon;
    if (SystemTray.isSupported()) {
    SystemTray tray = SystemTray.getSystemTray();
    Image image = Toolkit.getDefaultToolkit().getImage("/avisos1/image/onibus.gif");

     MouseListener mouseListener = new MouseListener() {
    
         @Override
         public void mouseClicked(MouseEvent e) {
             throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
         }
    
         @Override
         public void mousePressed(MouseEvent e) {
             System.out.println("Foi pressionado com o mouse");
             throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
         }
    
         @Override
         public void mouseReleased(MouseEvent e) {
             throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
         }
    
         @Override
         public void mouseEntered(MouseEvent e) {
             throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
         }
    
         @Override
         public void mouseExited(MouseEvent e) {
             throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
         }
     };
     ActionListener exitListener = new ActionListener() {
         
          @Override
         public void actionPerformed(ActionEvent e) {
             System.out.println("Usuário dsconectou");
             JOptionPane.showMessageDialog(null,"Atenção\n\nVocê esta saindo do sistema não receberá mais mensagens");
             System.exit(0);
             throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
         }
     };
     ActionListener mostramsgListener = new ActionListener() {
    
         @Override
         public void actionPerformed(ActionEvent e) {
             JOptionPane.showMessageDialog(null,"Em Desenvolvimento! :D " +rec.msg); //Devolve o valor atribuido na classe Cliente
             throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
         }
     };
     ActionListener sobreListener = new ActionListener() {
    
         @Override
         public void actionPerformed(ActionEvent e) {
             JOptionPane.showMessageDialog(null,"DGSistemaS --> DGS²\ndgs.nmk@gmail.com\nSistema de Avisos" );
             throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
         }
     };
     PopupMenu popup = new PopupMenu("Menu");
     MenuItem mostramsg = new MenuItem ("Exibir Mensagem");
     MenuItem sobre = new MenuItem ("Sobre");
     MenuItem defaultItem = new MenuItem ("Sair");
     mostramsg.addActionListener(mostramsgListener);
     sobre.addActionListener(sobreListener);
     defaultItem.addActionListener(exitListener);
     popup.add(mostramsg);
     popup.add(sobre);
     popup.addSeparator();
     popup.add(defaultItem);
     trayIcon = new TrayIcon (image, "Avisos Jundia", popup);
     trayIcon.setImageAutoSize(true);
     
     ActionListener actionListener = new ActionListener() {
    
         @Override
         public void actionPerformed(ActionEvent e) {
             trayIcon.displayMessage("Avisos", "Em desenvolvimento! :D",  TrayIcon.MessageType.INFO);
             throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
         }
     };
     trayIcon.setImageAutoSize(true);
     trayIcon.addActionListener(actionListener);
     trayIcon.addMouseListener(mouseListener);
     
     try {
         tray.add(trayIcon);
     } catch (AWTException e){
         System.err.println("Erro TrayIcon não sera adicionado");
     }
    

    }else{
    JOptionPane.showMessageDialog(null,“Recurso não disponivel para seu Sistema Operacional”);

    }
    }
    }[/code]

Você entende que os dados recebidos pelo socket são assíncronos, não? Desta forma, você precisa implementar algum recurso que permita à instância de objeto da classe Cliente (o que recebe o valor) avisar às instâncias de objetos que tem interesse em utilizar o valor da variável msg. Talvez o pattern observer seja interessante.

CAra não sabia que eles eram assíncronos, valew a dica vou tentar aki… abrço

Consegui aqui pelo observer obrigado pela ajuda segue resolução:

na classe cliente:

Socket s = new Socket("127.0.0.1", 2805); final InputStreamReader streamReader = new InputStreamReader(s.getInputStream()); final BufferedReader reader = new BufferedReader(streamReader); String msg = reader.readLine(); setChanged(); notifyObservers(msg); System.out.println(msg); reader.close();

na classe do systray1:

@Override public void update(Observable obj, Object arg) { if (arg instanceof String) { msg = (String) arg; System.out.println("\n Recebido:" + msg); }