[RESOLVIDO] Atribuir valor a uma variavel recebida pelo socket

3 respostas
D

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

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();
 
}  
}

Classe q gostaria de usar a variavel:

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²\[email removido]\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");
        
    }
  }
}

3 Respostas

drsmachado

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.

D

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

D

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); }

Criado 19 de setembro de 2013
Ultima resposta 3 de out. de 2013
Respostas 3
Participantes 2