Ola a todos…
Estou fazendo um projeto e estou tendo problema em usar o padrão observer em uma estrutura rmi. Comecei implementando alguns tutoriais básicos que achei aqui mesmo no fórum e em alguns outros sites e obtive os resultados esperados, mas não consegui utilizar os dois padrões juntos. Segue código:
Servidor
import java.rmi.Naming;
import java.util.Observable;
import java.util.Observer;
public class MensageiroServer implements Observer{
public MensageiroServer() {
try {
InterfaceMensageiro m = new MensageiroImpl();
Naming.rebind("rmi://192.168.1.92:1099/MensageiroServer", m);
m.retornaSistemaMensagens().addObserver(this);
m.retornaSistemaMensagens().setMensage("oi");
//na estrutura local funciona
System.out.println("Mensageiro Server ON");
}
catch( Exception e ) {
System.out.println( "Trouble: " + e );
}
}
public static void main(String[] args) {
new MensageiroServer();
}
@Override
public void update(Observable o, Object arg) {
System.out.println(((MensagensRecentes)o).getMensage());
}
}
Cliente:(Não reparem no código do netbeans, pressa de fazer dah nisso XD)
import java.io.Serializable;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextArea;
public class JanelaMelmanSN extends javax.swing.JFrame implements Observer, Serializable{
private JPanel PanelPrincipal;
private JButton envia;
private JPanel fotoAmigo;
private JLabel jLabel1;
private JLabel jLabel2;
private JSeparator jSeparator1;
private JPanel suaFoto;
private JTextArea textoConversa;
private JTextArea textoEnvio;
private InterfaceMensageiro m;
private MensagensRecentes msgAtualizacao;
public JanelaMelmanSN() {
initComponents();
try {
m = (InterfaceMensageiro) Naming.lookup( "rmi://192.168.1.92/MensageiroServer" );
} catch (NotBoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
try {
//msgAtualizacao = m.retornaSistemaMensagens(); //fazendo-se uma instancia, o programa roda, mas nao faz acesso
//msgAtualizacao.addObserver(this); //a atualizacoes gerais, apenas do proprio pc.
m.retornaSistemaMensagens().addObserver(this);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void initComponents();//apagado pois é grande e desnecessario
private void enviaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_enviaActionPerformed
//msgAtualizacao.setMensage(textoEnvio.getText()); //Para uso com instancia.
try {
m.retornaSistemaMensagens().setMensage(textoEnvio.getText());
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(textoEnvio.getText());
}//GEN-LAST:event_enviaActionPerformed
public void update(Observable o, Object arg) {
textoConversa.setText(textoConversa.getText()+"\n"+((MensagensRecentes)o).getMensage());
}
}
Estas são as principais, se tiverem alguma dúvida só falar que eu posto d novo.
Obrigado pela atenção e tenha um bom dia/tarde/noite.
Att:Abstract Group