Java Eclipse SWT: Methode wird nicht aufgerufen?

Yumix

Commander
Registriert
Juni 2009
Beiträge
2.062
Ok, ich habe folgendes Problem.

Ich habe ein Plugin für Eclipse welches Daten über einen Websocket empfängt. Die Daten werden vom EventHandler in einer DataHandler Klasse abgelegt welche die Daten verwaltet.

Empfange ich neue Daten, möchte ich den TreeViewer, welcher diese anzeigt aktualisieren. Der TreeViewer ist in einer Composite Klasse, welche von der View genutzt wird. Ich rufe vom DataHandler also die View auf, gebe mir die Composite und rufe deren Update Methode auf.

Also:

EventHandler:
onXYDataFetched() -> DataHandler.setData()

DataHandler:
view.getComposite().updateTreeViewer()

Es läuft noch bis zur getComposite(), die updateTreeViewer() wird nicht ausgeführt und es wird auch kein Fehler geworfen. Wird die updateTreeViewer aus dem Composite selbst aufgerufen, funktioniert sie!

Ich dachte es läge daran, dass es nicht vom UI Thread ausgeführt wird (obwohl es in dem Fall eine Fehlermeldung geben würde), also habe an allen 4 Stellen mit

Code:
Display.getDefault().asyncExec(new Runnable() {
    public void run() {

    }
});
versucht es auf dem UI Thread auszuführen, es funktioniert trotzdem nicht. Hat jemand eine Idee woran es liegen könnte?

Danke

Edit: Ich sehe gerade dass sie aus dem EventHandler ausgeführt wird, könnte das also notfalls nutzen. Der DataHandler wird in der View erstellt und dem EventHandler übergeben, falls das von Bedeutung ist.
 
Zuletzt bearbeitet:
Yumix schrieb:
DataHandler:
view.getComposite().updateTreeViewer()

Es läuft noch bis zur getComposite(), die updateTreeViewer() wird nicht ausgeführt und es wird auch kein Fehler geworfen. Wird die updateTreeViewer aus dem Composite selbst aufgerufen, funktioniert sie!

Wenn getComposite ausgeführt wird, aber updateTreeViewer nicht und auch ganz sicher keine Exception ausgelöst wird, bleibt eigentlich nur noch ein Thread-Deadlock oder eine Endlosschleife/-Rekursion.

Im Debugger sollte das zu sehen sein; mal die verschiedenen Threads aufklappen. VisualVM zeigt Deadlocks mit wer auf wen wartet für bereits laufende Java-Anwendungen.
 
Zurück
Oben