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.
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(); } });
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.
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^^
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden