org.eclipse.swt.SWTException: "Widget is disposed" aus Tabellenaktualisierung

8

Die App ist ein auf Eclipse 3.6 basierendes RCP (Version 3.5.2), das auf Windows 7 läuft.

Ich habe eine benutzerdefinierte View-Klasse, die ein TableViewer enthält und refresh() darauf aufruft. Manchmal, aber nicht sehr oft, führt dies zur Stapelverfolgung. Es wird innerhalb des UI-Threads aufgerufen. Ich vermutete das Problem mit anderem Code, der die Backing-Liste in die Tabelle ändert, aber dass jeder Code, der dies tut, auch entweder in einer syncExec- oder asyncExec-Methode ausgeführt wird, so dass ich nicht verstehe, wie es zu einem Synchronisationsproblem zwischen den Änderungen kommen könnte von Tabellenelementen und die Aktualisierung des Viewers.

Irgendwelche Ideen, was ich tun kann, um das zu verhindern?

%Vor%     
Alb 28.02.2011, 16:22
quelle

3 Antworten

7

Scheint wie refresh () -Methode aufgerufen wird, nachdem der Viewer entsorgt wurde (geschlossen?). Sie können diese Ausnahme vermeiden, indem Sie Folgendes überprüfen:

%Vor%     
spektom 05.06.2011 04:55
quelle
2

Verwenden Sie display.isDisposed () wie folgt.

%Vor%

Aber denken Sie daran, dass isDisposed () return wahr ist und dann das Ende anordnet. Darum beschuhen Sie sich mit Flag

disposing = wahr;

display.dispose ();

disposing = falsch;

    
Vladislav 23.08.2013 10:43
quelle
1

Erstellen Sie einfach einen neuen Arbeitsbereich. Importieren Sie Ihre Projekte. Es hat für mich funktioniert. :)

    
some_other_guy 22.01.2013 05:50
quelle

Tags und Links