ubuntuusers.de

Java Multithreading und Observer

Status: Gelöst | Ubuntu-Version: Ubuntu
Antworten |

bazz-dee

Anmeldungsdatum:
17. Oktober 2005

Beiträge: 172

Wohnort: Salzgitter

Moinsen ...
Ich habe folgendes Problem:

Ich hab eine GUI und ein ConsoleUI, und beide basieren auf Daten die in einer XML Datei gespeichert werden.
Nun brauche ich einen Observer der dafür sorgt das die Daten in den UIs sich ändern wenn sich etwas an der XML Datei ändert. Eigentlich recht simpel, aber durch die SWT Fenster muss das ganze ja auch mit Multithreading funktionieren.\\ Ich hab eine GUI Klasse, diese baut nur das Fenster auf, darin sind zwei Tabs. Diese Tabs sind in eigenen Klassen realisiert und erweitern "Composite". Da mehrfach Vererbung nicht geht in Java können die beiden Tabs also nicht die in Java eingebaute "Observer" Klasse erweitern. Wenn ich die eigentliche GUI Klasse als Erweiterung von "Observer" implemnetiere und einen parallelen Thread starte der "Observable" implementiert funktioniert die Erkennung das sich die Daten ändern. Aber der GUI Thread kann nicht auf die Daten des Composites zugreifen, da es dann "Invalid Thread access" gibt. Ich hab auch schon an eine Lösung über Pipes gedacht, aber die Blockieren ja dann die Funktionalität der GUI. Oder irre ich mich? Ich bin offen für verschiedenste Ideen zur Lösung des Problems. Gruß bazz-dee

dentaku

Avatar von dentaku

Anmeldungsdatum:
31. Januar 2005

Beiträge: 3785

Sorry, aber durch Deine Beschreibung wird man nicht schlau. Dein Problem wirst Du wohl nur durch Darstellung des kleinsten Teilproblems behandeln können. Nur soviel: wieso benutzt Du SWT? Swing ist viel besser in Java integriert und hat auch mit Multithreading bei generischen Komponenten keine Probleme (berücksichtigt man die Besonderheit des EventDispatchThreads).

bazz-dee

(Themenstarter)

Anmeldungsdatum:
17. Oktober 2005

Beiträge: 172

Wohnort: Salzgitter

SWT sieht besser aus, Systemstandard halt. Ausserdem find ich das Layouting über FormData cool 😉
Aber vielleicht hast du recht und ich sollte mir mal überlegen das ganze auf Swing umzustellen. Da hab ich zumindest mal Pipes zwischen Threads erfolgreich zwischen Threads mit GUI implementiert. Muss mich mal schlau machen ob es da mehr Leute gibt die Probleme mit Threads in SWT haben

bazz-dee

(Themenstarter)

Anmeldungsdatum:
17. Oktober 2005

Beiträge: 172

Wohnort: Salzgitter

ok bin selbst auf die lösung gekommen:

display.syncExec(
  new Runnable() {
    public void run(){
      //component updating
    }
  }
);
Antworten |