JFace TreeViewer Exception "widget is disposed"

dennisalcapone

Grünschnabel
Hallo,
ich habe wenig Erfahrung mit JFace/Viewer und habe noch ein Verständnisproblem.
Ich möchte einen einfachen tree durch einen treeviewer anzeigen lassen.

tree = new Tree(form, SWT.NULL);
tRoot=new TreeItem(tree, SWT.NULL, 0 );
tRoot.setText("Wurzel");
tv = new TreeViewer(tree);
tv.setContentProvider(new TreeContentProvider());
tv.setInput(tRoot);

Wenn tv.setIput() aufgerufen wird, bekomme ich die SWTException 'widget is disposed'

In 'TreeContentProvider()' wird dabei ja automatisch 'inputChanged(Viewer viewer, Object oldInput, Object newInput)' aufgerufen und 'newInput' zeigt auch auf meine Baumwurzel (tRoot).
Dann wird aber getElements(...) aufgerufen und hier wird 'element' zwar als TreeItem erkannt, aber der Wert (Text) ist *disposed*

Habe ich bei den Aufrufen irgendwas vergessen?
Anbei noch mal ein Auszug aus dem 'ContentProvider' und der Konsolenausgabe.

Danke für Eure Hilfe
P.S. Die OriginalDoku von Eclipse hat mir nicht weitergeholfen


public class TreeContentProvider implements ITreeContentProvider {
public Object[] getElements(Object element) {
System.out.println("XMLTCP: getElements...Object=="+element.toString());
return getChildren(element);
}

/*...... andere Methoden .....*/

public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
System.out.println("InputChanged(), newInput=="+newInput.toString());
}
}

Ausgabe auf der Konsole:
...
InputChanged(), newInput==TreeItem {Wurzel}
XMLTCP: getElements...Object==TreeItem {*Disposed*}
...
 
Du brauchst den Tree dem TreeViewer gar nicht übergeben (Wenn ich mich recht errinnere).
Die Daten die der TreeViewer benötigt bekommt dieser aus dem
ContentProvider.
Die Art der Darstellung übernimmt der LabelProvider.

Der Zugriff auf den darunterliegende Tree ist normal nicht notwendig.
 
Hallo Christian,
vielen Dank für Deinen Tip, hat mir sehr geholfen.
Beim Erzeugen des TreeViewer übergebe ich jetzt nicht den tree sondern das composite 'form' (wie beim Erzeugen des Baums). Dann funktioniert es.

tree = new Tree(form, SWT.NULL);
tRoot=new TreeItem(tree, SWT.NULL, 0 );
tRoot.setText("Wurzel");
tv = new TreeViewer(form);
tv.setContentProvider(new TreeContentProvider());
tv.setInput(tRoot);

Nochmals Danke,
Jürgen
 
Zurück