Avatar billede Tampico Praktikant
01. marts 2004 - 14:39 Der er 9 kommentarer og
1 løsning

RMI problem

Hejsa !!!

Jeg sidder og arbejder med RMI, og i den forbindelse skal jeg sende et Vare-objekt til klienten.

Når jeg så skal skrive specifikke ting ud fra varen, bruger jeg følgende kode:

try
    {
      k = (ServerInterface) Naming.lookup  ("rmi://localhost/tjeneste");
     
      Tmærke.setText(k.lageropslag(vareNr).getBekskrivelse());


Problemet er bare at den ikke skriver noget ud ???
Jeg har testet det på alle leder og kanter, serveren kører og virker og jeg ved metoderne virker udenom RMI ???

Kan det have noget med at gøre at jeg modtager et vare-objekt, som jo i virkeligheden ligger på serveren eller ???

Hjælp !!!
Avatar billede arne_v Ekspert
01. marts 2004 - 14:56 #1
Koden ser OK ud, men prøv lige og check præcis hvad k indeholde og kan.
Avatar billede Tampico Praktikant
01. marts 2004 - 16:08 #2
Ja, måske er det hos k skoen trykker.

Jeg har sat k til:
static ServerInterface k = null;

På min server kalder den metoden lageropslag som så henter objektet i min adabptorklasse Lager, som så henter det fra en database.
Metoden lageropslag ser således ud

public Vare lageropslag(String vareNr)
  {
    id = new VareNr(vareNr);
    l = new Lager();

    return l.findVare(id);
  }

Dermed ryger den over RMI til min GUI, hvor jeg henter den via:
Tmærke.setText(k.lageropslag(vareNr).getBekskrivelse());

Men det underlige er jo bare at de andre metoder virker fint, og at denne metode også virker når jeg kører uden RMI. Eneste forskel er bare at det er et Vareobjekt jeg henter hos denne fremfor en String eller int i de andre metoder.
Avatar billede arne_v Ekspert
01. marts 2004 - 16:16 #3
Vare er naturligvis serializable og har en constructor med ingen
argumenter og get og set metoder til alle properties ?
Avatar billede arne_v Ekspert
01. marts 2004 - 16:17 #4
Men kan du ikke prøve at kalde lidt flere metoder på k.lageropslag(vareNr) og
se om det returnerede objekt er helt messed up ?
Avatar billede Tampico Praktikant
01. marts 2004 - 18:25 #5
Jeg har opdaget at det er fordi der bliver kastet en eller anden form for exception, så noget er altså galt.

Hvad betyder det at Vare skal være serializable ?

Ja, jeg har get og set-metoder.

try

  k = (ServerInterface) Naming.lookup("rmi://localhost/tjeneste");

      LagerHandler lh = new LagerHandler();
      JOptionPane.showMessageDialog(null, ""+lh.lageropslag(vareNr).getBekskrivelse());

      JOptionPane.showMessageDialog(null, "test "+k.lageropslag("2").getPris().toString());     
}
catch (Exception e)
{
  JOptionPane.showMessageDialog(null, "fejl!!!");
}


Første pop-up virker fint (uden RMI), men nummer to (med RMI) får en exception :o(
Avatar billede Tampico Praktikant
01. marts 2004 - 18:47 #6
Ser ud til det er en nullPointerException jeg får...men hvorfor får jeg kun det når jeg sender objektet over RMI ???
Avatar billede arne_v Ekspert
01. marts 2004 - 20:02 #7
Vare skal implementere java.io.Serializable interfacet (og have en constructur
uden argumenter og get og set metoder).
Avatar billede arne_v Ekspert
01. marts 2004 - 20:04 #8
Prøv evt.:

catch (Exception e)
{
  e.printStackTrace();
}

og kør det i et console vindue, fordi så får du meget mere information om fejlen.
Avatar billede Tampico Praktikant
01. marts 2004 - 22:05 #9
Mange TAK Arne, så virker det.
Det var Serializable interfacet der manglede. Hvis du lige svarer får du dine velfortjente point :o)
Avatar billede arne_v Ekspert
01. marts 2004 - 22:34 #10
svar
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