speedi Geschrieben 14. Januar 2010 Geschrieben 14. Januar 2010 Hallo, ich habe ein folgedes Problem: Mein SWT-Canvas in dem ich selbst etwas zeichnen möchte ich neu zeichnen lassen, sobald ein anderer Programmteil neue Daten für dieses Canvas vorliegen hat bringt mir eine Exception. Da die Daten in einem separaten Thread geladen werden habe ich in diesem einfach die redraw()-Methode des Canvas gerufen. Allerdings verursacht mir das wiederrum eine "SWTException: Invalid thread access". Scheinbar kann den redraw nur ein bestimmter Thread auslösen und sonst keiner. Hat jemand eine Idee, wie man das umgehen kann? Gibts irgendwie etwas wie ich SWT sagen kann das es bei gelegenheit diese Componente mal neu Zeichnen soll? Danke. Zitieren
VaNaTiC Geschrieben 14. Januar 2010 Geschrieben 14. Januar 2010 Das ist nicht nur bei SWT so. Auch bei normalem Swing und AWT ist es so, dass nur der GUI-Thread zeichnen darf. Als Lösung gibt es z.Bsp.: final MeinCanvas myCanvas = meine Referenz; SwingUtilities.invokeLater(new Runnable() { public void run() { myCanvas.redraw(); } }); Zitieren
speedi Geschrieben 15. Januar 2010 Autor Geschrieben 15. Januar 2010 Danke! Genau nach sowas hab ich gesucht. Das ist nicht nur bei SWT so. Auch bei normalem Swing und AWT ist es so, dass nur der GUI-Thread zeichnen darf. Das mag schon sein, dennoch kann ich die repaint()-Methode bei Swing von jeden x-beliebigen Thread aufrufen. Und die Methode blockiert auch so lang wie der repaint dauert, weils eben gekapsel ist. Zitieren
speedi Geschrieben 15. Januar 2010 Autor Geschrieben 15. Januar 2010 Bei SWT gibts ein Pendant zu der Swing Methode: display.asyncExec(myRunnable); Wenn man einmal weiß wonach man suchen muss^^ Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.