SWT mehrere Threads verwenden

bigJ01

Grünschnabel
Hallo ich habe folgendes Problem:

Ich habe ein Applet geschrieben das durch einen Thread aus einer Fachkonzept-Klasse immer wieder neugezeichnet wird.

Die Fachkonzept erbt von Observable und implementiert Runnable,
die GUI implementiert Observer.

Die GUI startet den Thread der Fachkonzept und dieser, meldet mit setChanged(), dass die die GUI sich neuzeichnen muss, in der Update der GUI wird, dann neugezeichnet.

Nun will ich das ganze in SWT machen, es funktioniert auch alles, nur der Thread darf nicht auf die GUI zugreifen: ivalid thread access.

Ich habe lange gesucht und ich stoße immer wieder auf diesen Code:
display.syncExec(
new Runnable() {
public void run(){
label.setText(text);
}
}
);
Ich habe auch über SWT's Appartment-threading gelesen, aber
mir ist nicht klar wie ich diesen Code einsetze.

Ich habe ja bereits eine Runnable das ist meine Konzeptklasse,
könnte mir bitte jemand helfen?
Ist die Grundstruktur die gleiche bei SWT?
Muß die GUI ebenfalls die Observer implementieren?

Mir ist nicht klar in welcher Klasse ich diesen Code von oben
laufen lassen soll, und wie genau.

MfG
Jakob
 
Grüß Dich,
leider scheint so eine globale Volltextsuche hier in dem Forum nicht richtig zu fkuntionieren oder ich bin zu dumm. Also nun zu Deiner Frage...
Kann es sein, dass Dein Runnable nicht in dem Event-Queue verarbeitenden Thread läuft?
in Swing müsstest Du ihn mittels SwingUtilities.invokeLater(Runnable); oder SwingUtilities.invokeAndWait(thread); aufrufen.
Tom hatte in bei einem ähnlichen Problem die SWT-Routinen herausgefunden, doch leider kann ich das Thema im Forum nicht mehr finden (s.o.)

Takidoso
 
ups ich habe grade was gefundne un bemerkt dass Du offenbar schon die richtige Routine vom SWT verwendest. hmmm
tja tut mir leid war nur ein Versuch

Takidoso
 
also Du verwendest das ganze so, dass Du anstelle eines direkten Aufrufes aus einem anderen Thread als dem Event-Queue Thread diese von Dir oben genannte Routine aufrufst und Ihr Deine Aktion mittels eines Runnables mitgibst.

Takidoso
 
Hänger in Swing: Swing-Fenster öffnet SWT-Fenster

Hallo,

ich habe das mal mit display.asyncExec() bzw. syncExec() ausprobiert und leider bleibt mein Swing-Fenster solange blockiert, bis ich das SWT-Fenster wieder schließe.

Kennt einer die Lösung für mein Problem?

Danke,
Tai
 
Re: Hänger in Swing: Swing-Fenster öffnet SWT-Fenster

tai hat gesagt.:
Hallo,

ich habe das mal mit display.asyncExec() bzw. syncExec() ausprobiert und leider bleibt mein Swing-Fenster solange blockiert, bis ich das SWT-Fenster wieder schließe.

Kennt einer die Lösung für mein Problem?

Danke,
Tai

hi Tai,
also ich befürchte Du versuchst SWT mit Swing zu vermischen. Wenn mich nicht alles täuscht, wird das nicht funktionieren, da es sich hierbei um 2 unterschiedliche Frameworks für die Erstellung von GUIs handelt, die mit einander nicht sonderlich kompatibel sein dürften. Beschränke Dich auf eines Dieser Frameworks.
Falls jemand da andere also positive Erfahrungen im Mischen von diesen beiden Frameworks haben sollte, würde ich mich über eine entsprechende Antwort sehr interssieren.

Takidoso
 
Re: Hänger in Swing: Swing-Fenster öffnet SWT-Fenster

Natürlich ist es schön, wenn man NUR swt oder swing verwenden kann. Doch in der Realität haben Unternehmen viel Geld (z.B.) in swing investiert.
Mir scheint, dass die einzige Möglichkeit für mein Problem darin besteht, unsere swing-Applikation in ein swt-window zu verpacken (und somit auch in eine parent-Shell), damit das blocking der Fenster nicht mehr auftritt :-(
 
Zurück