JTree:触发treeNodesInserted时越界

时间:2013-11-16 18:38:10

标签: java swing thread-safety jtree

我有一个JTree,一些自定义TreeNode,一个扩展DefaultTreeModel的模型和一个为我的模型添加节点的线程。
这种情况有时会以非常高的频率发生。

我的节点由TreeSet支持,用于管理子节点:这样子节点总是被排序。

我的模型有add()方法尝试添加节点。如果已存在具有相同标识符的节点,则不会更改任何内容(这将针对父节点的TreeMap的KeySet进行检查。)

每当添加节点时,都会触发NodesInserted事件 这就是问题:由于使用了TreeMaps,每当添加节点时我的树会自行重新排序,传递给EventListeners的索引可能无法反映当侦听器处理NodesInserted时添加的节点的位置事件。对于负责重新绘制的默认侦听器也是如此。

因此,out-of-bound exception会在某个时刻被抛出。

如何使此设置线程安全?

1 个答案:

答案 0 :(得分:0)

http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html

SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...));