org.eclipse.swt.SWTException: “Widget est disposé” à partir de la table d'actualisation
L'application est un Eclipse 3.6 base de RCP (donc jface version 3.5.2) en cours d'exécution sur windows 7.
J'ai un Affichage personnalisé de la classe qui contient une TableViewer
et les appels refresh()
sur elle. Parfois, mais pas très souvent la trace de la pile ci-dessous. Il est appelé à partir à l'intérieur de la thread de l'INTERFACE utilisateur. Je soupçonne que le problème était avec un autre code qui modifie la sauvegarde de liste de la table, mais que le code qui fait cela est également exécuter dans une syncExec ou asyncExec méthode donc je ne comprends pas comment il pourrait être un problème de synchronisation entre l'évolution du tableau des éléments et de l'actualisation de la visionneuse.
Les idées de ce que je peux faire pour éviter que cela se reproduise?
!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)
Seidel Non, je veux dire il y a un ContentProvider (classe ContentProvider s'étend AbstractContentProvider implémente IStructuredContentProvider, IItemListViewer) utilisé par le TableViewer qui peut modifier les éléments qu'il contient lors de l'exécution.
OriginalL'auteur Alb | 2011-02-28
Vous devez vous connecter pour publier un commentaire.
Semble comme méthode refresh() est appelée après que le spectateur est éliminé (fermé?). Vous pouvez éviter cette exception en cochant:
OriginalL'auteur michael
Essayez d'utiliser l'affichage.isDisposed() comme ceci.
Mais n'oubliez pas que isDisposed() retourne true alors l'élimination de la fin. C'est pourquoi vous chaussés use
élimination = true;
d'affichage.dispose();
élimination = false;
OriginalL'auteur Vladislav
Il suffit de créer un nouvel espace de travail. L'importation de vos projets. Il a travaillé pour moi. 🙂
OriginalL'auteur some_other_guy