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
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.
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() {
}
});
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: