Avatar billede ullesan Nybegynder
11. november 2004 - 19:37 Der er 5 kommentarer og
1 løsning

Remote observing

hey

Jeg har et remote objekt som jeg gerne vil gøre observable, men kan ikke helt hitte ud af at bringe de to ting sammen.

Jeg har sat RMI'et op og ligeledes har fået sat klienter op, der kan tilgå objektet, men det jeg ønsker er når den ene klient har opdateret objektet, at de andre så får besked om dette og viser det

Spg er af den grund, hvordan kan man sætte det op?

Tak


Mine klasser ser således ud

### obj.java ###

import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;

public class obj extends UnicastRemoteObject implements objI {
  private String s;

  public obj() throws RemoteException {
  }

  public String getS() {
    System.out.println("s = " + s + " er blevet sendt til klient");
    return s;
  }

  public void setS(String s) {
    System.out.println("s er sat til: " + s);
    this.s = s;
  }

  public static void main(String[] args) {
    String navn = "obj";

    try {
      LocateRegistry.createRegistry(1099);
      objI o = new obj();
      Naming.rebind(navn, o);
      System.out.println(navn + " registreret");
    }
    catch (Exception e) {
      System.out.println(e);
    }
  }
}


### objI.java ###

import java.rmi.*;

public interface objI extends Remote {
  public String getS() throws RemoteException;
  public void setS(String s) throws RemoteException;
}


### Klient.java ###

import java.rmi.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Klient extends JFrame {

  objI o = null;

  JLabel jLabel1 = new JLabel();
  JButton jButton1 = new JButton();
  JTextField jTextField1 = new JTextField();
  JButton jButton2 = new JButton();

  public Klient() {
    try {
      jbInit();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }

  private void jbInit() throws Exception {
    try {
      o = (objI) Naming.lookup("//localhost:1099/obj");
    }
    catch (Exception ex) {
      System.out.println(ex);
    }

    jLabel1.setText(o.getS());
    jLabel1.setBounds(new Rectangle(20, 26, 151, 28));
    this.getContentPane().setLayout(null);
    this.setSize(400, 150);
    jButton1.setBounds(new Rectangle(266, 21, 96, 25));
    jButton1.setText("Aflæs");
    jButton1.addActionListener(new Klient_jButton1_actionAdapter(this));
    jTextField1.setBounds(new Rectangle(15, 58, 204, 21));
    jButton2.setBounds(new Rectangle(265, 54, 99, 25));
    jButton2.setText("Opdater");
    jButton2.addActionListener(new Klient_jButton2_actionAdapter(this));
    this.getContentPane().add(jLabel1, null);
    this.getContentPane().add(jTextField1, null);
    this.getContentPane().add(jButton1, null);
    this.getContentPane().add(jButton2, null);
  }

  void jButton1_actionPerformed(ActionEvent e) {
    try {
      jLabel1.setText(o.getS());
    }
    catch (RemoteException ex) {
    }
  }

  void jButton2_actionPerformed(ActionEvent e) {
    try {
      o.setS(jTextField1.getText());
    }
    catch (RemoteException ex) {
    }
  }

  public static void main(String[] args) {
    for (int i = 0; i < 3; i++) {
      Klient k = new Klient();
      k.setLocation(405 * i, 0);
      k.show();
    }
  }
}

class Klient_jButton1_actionAdapter
    implements java.awt.event.ActionListener {
  Klient adaptee;

  Klient_jButton1_actionAdapter(Klient adaptee) {
    this.adaptee = adaptee;
  }

  public void actionPerformed(ActionEvent e) {
    adaptee.jButton1_actionPerformed(e);
  }
}

class Klient_jButton2_actionAdapter
    implements java.awt.event.ActionListener {
  Klient adaptee;

  Klient_jButton2_actionAdapter(Klient adaptee) {
    this.adaptee = adaptee;
  }

  public void actionPerformed(ActionEvent e) {
    adaptee.jButton2_actionPerformed(e);
  }
}
Avatar billede arne_v Ekspert
11. november 2004 - 19:39 #1
Kan det ikke laves med callback ?
Avatar billede ullesan Nybegynder
11. november 2004 - 19:40 #2
kan du uddybe det venligst?
Avatar billede arne_v Ekspert
11. november 2004 - 19:40 #3
Som i mit eksempel i denne her artikel:
  http://www.eksperten.dk/artikler/225
Avatar billede arne_v Ekspert
11. november 2004 - 19:48 #4
Den viser register og notify.
Avatar billede arne_v Ekspert
21. november 2004 - 19:38 #5
OK ?
Avatar billede ullesan Nybegynder
22. november 2004 - 12:25 #6
yepper... takker!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester