org.eclipse.swt.SWTException: "Widget entsorgt wird" aus der Tabelle aktualisieren
Die app ist ein Eclipse-3.6-basierte RCP (so jface version 3.5.2) unter windows 7.
Habe ich eine benutzerdefinierte View-Klasse, die enthält eine TableViewer
und fordert refresh()
auf Sie. Manchmal, aber nicht sehr oft Ergebnisse im stack-trace unten. Es ist aus aufgerufen, in dem UI-thread. Ich vermutete war das problem mit anderen code, ändert das backing-Liste auf den Tisch, aber, dass code, der dies tut, wird auch entweder ein syncExec oder die Methode asyncExec also ich verstehe nicht, wie es sein könnte, ein Synchronisations-Problem zwischen der änderung der Tabelle Artikel und die Aktualisierung der Zuschauer.
Irgendwelche Ideen was ich tun kann, um dies zu verhindern?
!ENTRY org.eclipse.jface 4 2 2010-10-20 09:22:06.140 !MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.jface". !STACK 0 org.eclipse.swt.SWTException: Widget is disposed
at org.eclipse.swt.SWT.error(SWT.java:3884) at org.eclipse.swt.SWT.error(SWT.java:3799)
at org.eclipse.swt.SWT.error(SWT.java:3770) at org.eclipse.swt.widgets.Widget.error(Widget.java:463)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:336)
at org.eclipse.swt.widgets.Widget.getData(Widget.java:521)
at org.eclipse.jface.viewers.AbstractTableViewer.setSelectionToWidget(AbstractTableViewer.java:921)
at org.eclipse.jface.viewers.StructuredViewer.setSelectionToWidget(StructuredViewer.java:1711)
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1399)
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1353)
at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1455)
at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:537)
at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1414)
...
at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:179)
- Meinst du mit "ändert sich die backing-Liste, um die Tabelle" einen direkten Zugriff auf die zugrunde liegenden SWT-Table-Komponente, oder sind auch Sie arbeiten auf den Betrachter? Ein snippet wäre hilfreich
- Seidel Nein, ich meine, es ist ein ContentProvider (Klasse ContentProvider erstreckt AbstractContentProvider implementiert IStructuredContentProvider, IItemListViewer), die von der TableViewer die kann sich ändern, die Elemente, die es enthält zur Laufzeit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint wie refresh () - Methode aufgerufen wird, nachdem der Betrachter wird entsorgt (geschlossen?). Sie können dies vermeiden, Ausnahme überprüfen:
Versuchen, verwenden Anzeige.isDisposed() wie folgt.
Aber denken Sie daran, dass isDisposed() return true dann entsorgen Ende. Das ist, warum Sie beschlagen use-flag
Entsorgung = true;
display.dispose();
Entsorgung = false;
Erstellen Sie einfach einen neuen Arbeits-Platz. Importieren Sie Ihre Projekte. Es funktionierte für mich. 🙂