Veröffentlicht 14. Januar 201015 j 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.
14. Januar 201015 j 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(); } });
15. Januar 201015 j Autor 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.
15. Januar 201015 j Autor Bei SWT gibts ein Pendant zu der Swing Methode: display.asyncExec(myRunnable); Wenn man einmal weiß wonach man suchen muss^^
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.