response_zugdetails des PluginClient

Für Fragen zu Plugins und zur Plugin-Entwicklung.

Moderatoren: Stellwerk-Admin, Moderatoren

Antworten
Benutzeravatar
matej
R-Admin [Tschechien West]Erbauer
Beiträge: 1383
Registriert: Mo Mär 05, 2007 7:46 pm
StiTz: 704347

response_zugdetails des PluginClient

Beitrag von matej »

Versuche jetzt seit zwei Stunden verzweifelt eine Lösung zu finden, aber no way.
Habe schon alles mir bekannte probiert.
Wobei meine Kenntnisse zugegebner Weise nicht ganz so umfassend sind.

Habe in meiner abgeleiteten Klasse vom PluginClient folgendes implementiert:

Code: Alles auswählen

public ZugDetails zd;

  protected void response_zugdetails(int zid, PluginClient.ZugDetails details){
    zd = details;
  }

  public PluginClient.ZugDetails getZugdetails(int zid){
    request_zugdetails(zid);
    return zd;
  }
Wenn ich nun von einer anderen Klasse folgendes tue:
1. Aufruf von "getZugdetails", über einen Button, so bekomme ich als Rückgabe "null".
Dabei kann ich den Aufruf auch mehrfach direkt hintereinander ausführen, immer bekomme ich "null".

Code: Alles auswählen

  public void jButton2_ActionPerformed(ActionEvent evt) {
    PluginClient.ZugDetails zd = meineDaten.getZugdetails(1);
    System.out.println(zd==null);
  }
ODER z.B.

Code: Alles auswählen

  public void jButton2_ActionPerformed(ActionEvent evt) {
    PluginClient.ZugDetails zd = meineDaten.getZugdetails(1);
    zd = meineDaten.getZugdetails(1);
    zd = meineDaten.getZugdetails(1);
    System.out.println(zd==null);
  }
2. Bei erneutem Aufruf mittels Button bekomme ich plötzlich was übergeben.

Vielleicht weiß jemand, was ich da falsch mache.
Weiß, das ist kein Java Forum, trotzdem mal die bescheidene Bitte um Hilfe.
Wurde alles mittels PluginTester getestet.
Euer Matthias ♂

R-Admin:
Fernverkehrsteam: Niederlande
The-Tauri
Beiträge: 137
Registriert: Do Dez 29, 2005 9:19 pm

Re: response_zugdetails des PluginClient

Beitrag von The-Tauri »

Hallo,

auch wenn Du die Methode request_zugdetails() aufrufst, heißt das nicht, dass direkt die Methode response_zugdetails() ausgelöst wird. Dies erfolgt erst, wenn die Daten auch wirklich angekommen und aufbereitet sind (man korrigiere mich, wenn ich falsch liege), deshalb geht Dein Programmablauf weiter mit der Rückgabe von zd, welches noch null ist.
Erst wenn die Bibliothek die Daten aus dem Applet erhalten hat, wird von der Verbindung die Methode response_zugdetails() aufgerufen, diese muss also veranlassen, dass die Referenz auf das erhaltene ZugDetails-Objekt dorthin weitergegeben wird, wo sie später benötigt wird.

Beispiel eines Lösungswegs:

Klasse MeinPluginClient

Code: Alles auswählen

private TestKlasse zuInformierendesObjekt;

  protected void response_zugdetails(int zid, PluginClient.ZugDetails details){
    zuInformierendesObjekt.angekommen(details);
  }

  public void checkZugdetails(int zid, TestKlasse pZuInformierendesObjekt){
    zuInformierendesObjekt = pZuInformierendesObjekt;
    request_zugdetails(zid);
  }
Und die Klasse TestKlasse, wohin die Daten sollen:

Code: Alles auswählen

public void aufrufen(zid) {
    meinPluginClient.checkZugdetails(zid,this);
}

public void angekommen(ZugDetails zd){
    // hier verarbeiten, z.B.
    System.out.println(zd);
}
Alternativ kannst Du natürlich in Deinem Code eine While-Schleife in der Getter-Methode einsetzen, die so lange läuft und die Rückgabe von zd verhindert, bis dieses "zd" nicht mehr null ist, aber das wäre schon etwas arg unschön programmiert :wink:

Ich hoffe, ich hab' das halbwegs verständlich formuliert, wenn nicht, einfach fragen ;)

Grüße aus dem Schwarzwald,
Moritz
jTrainGraph - Bildfahrpläne im Stellwerksim: Forumsthema, Homepage
Benutzeravatar
matej
R-Admin [Tschechien West]Erbauer
Beiträge: 1383
Registriert: Mo Mär 05, 2007 7:46 pm
StiTz: 704347

Re: response_zugdetails des PluginClient

Beitrag von matej »

BINGO, das ist es. :D
Vielen Dank.

Wenn nochmal was ist melde ich mich.
Euer Matthias ♂

R-Admin:
Fernverkehrsteam: Niederlande
Antworten