Hey!
Ich habe folgendes wirklich sehr schlecht dokumentiertes Problem. Ich habe einen JTree in einem Thread laufen und der greift auf ein TreeModel zu, dass in einem anderen Thread verändert wird. Mal werden da Nodes hinzugefügt, mal werden welche gelöscht und mal wird der Inhalt eines Nodes geändert.
Mein TreeModel ist ein DefaultTreeModel und in das füge ich DefaultMutableTreeNodes ein. Außerdem habe ich einen TreeSelectionListener implementiert, der eben aus Selektionen im Tree reagiert und zwar liest er das Object des selektierten Nodes aus und gibt es in einem EditorPane aus.
Jetzt kann es eben sein, dass grade ein Node selektiert wird, der gerade vom anderen Thread gelöscht wird oder dessen Inhalt (also das User-Object) geändert wird und das führt eben zu Problemen. In der API steht unter DefaultMutableTreeNode lediglich:
"This is not a thread safe class.If you intend to use a DefaultMutableTreeNode (or a tree of TreeNodes) in more than one thread, you need to do your own synchronizing. A good convention to adopt is synchronizing on the root node of a tree. "
Aber mir ist nicht klar, wie das gehen soll. Weil grade in dem JTree selbst und in dem TreeSelectionListener kenn ich den RootNode ja nicht mal.
Hoffe ihr könnt mir helfen.
Vielen Dank schonmal!
Ich habe folgendes wirklich sehr schlecht dokumentiertes Problem. Ich habe einen JTree in einem Thread laufen und der greift auf ein TreeModel zu, dass in einem anderen Thread verändert wird. Mal werden da Nodes hinzugefügt, mal werden welche gelöscht und mal wird der Inhalt eines Nodes geändert.
Mein TreeModel ist ein DefaultTreeModel und in das füge ich DefaultMutableTreeNodes ein. Außerdem habe ich einen TreeSelectionListener implementiert, der eben aus Selektionen im Tree reagiert und zwar liest er das Object des selektierten Nodes aus und gibt es in einem EditorPane aus.
Jetzt kann es eben sein, dass grade ein Node selektiert wird, der gerade vom anderen Thread gelöscht wird oder dessen Inhalt (also das User-Object) geändert wird und das führt eben zu Problemen. In der API steht unter DefaultMutableTreeNode lediglich:
"This is not a thread safe class.If you intend to use a DefaultMutableTreeNode (or a tree of TreeNodes) in more than one thread, you need to do your own synchronizing. A good convention to adopt is synchronizing on the root node of a tree. "
Aber mir ist nicht klar, wie das gehen soll. Weil grade in dem JTree selbst und in dem TreeSelectionListener kenn ich den RootNode ja nicht mal.
Hoffe ihr könnt mir helfen.
Vielen Dank schonmal!