SWT - Invalid thread access
-
Hallo Leute,
ich habe eine kleine SWT Applikation. Nun will ich aus einer anderen Klasse, im selben Package auf ein Textfeld zugreifen. In dieser Klasse lausch ich auf einem bestimmten Port und warte darauf das was reinkommt, sobald was auf dem Port ankommt soll sie in ein Textfeld der Applikation was ausgeben. Diese soll in einem extra Thread passieren, im Augenblick starte ich diesen Thread in der Main der Applikation, dies sieht so aus:
public static void main(String[] args) { Klasse123 a; ... ... try{ a = new Klasse123(textArea, nrField); Thread t = new Thread(a); t.start(); } ... ... }
Dieser Klasse übergeb ich die textArea und ein weiteres EditFeld um darauf zugreifen zu können.
Doch leider bekomm ich dann ne Fehlermeldung
Exception in thread "Thread-1" org.eclipse.swt.SWTException: Invalid thread access
Ich hab zwar mit google was gefunden, doch leider hab ich damit das Problem auch nicht lösen können.
Grüße.
B@sti
-
SWT verbietet den direkten Zugriff auf Widgets aus einem anderen Thread als dem EDT. Im Gegensatz zu Swing fliegt eine Exception, wenn man es trotzdem versucht.
Benutze Display#asyncExec(Runnable), also das Pendant zu Swings invokeLater().
-
Ja, das hab ich auch scho gefunden, trotzdem ist mir nicht ganz klar wie das dann funktioniert? Ich hab auch ein Beispiel gefunden, aber da wird im Thread nur ein Wert geändert und das wars, bei mir aber ist die Klasse etwas größer, und die kann ich schlecht in die Main als z.B. anonyme Klasse kopieren.
-
Bei deiner kurzen Beschreibung kann man nicht viel sagen. Kannst du ne final Instanz von der Klasse erzeuegn?
-
Du musst doch nur die Anweisung, die schreibend auf ein Widget zugreift in ein (anonymes) Runnable kapseln und das dann Display.asyncExec übergeben. Sehe das Problem nicht.
-
Da war wohl gestern der Wurm drin, als ich es Heutmorgen nochmal gelesen hatte war es klar... danke byto.
Grüße,
Basti