Java 使用多线程迭代和修改jtree

Java 使用多线程迭代和修改jtree,java,swing,Java,Swing,我有一个非常大的JTree,我想浏览从根到叶的所有节点 我需要根据用户输入进行某种重组 例如,我希望所有用户对象字符串以“a”开头的节点在树中的新节点内重新分组 首字母: 根-安,约翰,安德鲁 之后: 根- 阿安 安得烈 约翰 我在考虑开始迭代,为每个节点启动一组线程,并在创建新节点时进行同步 有什么想法吗?一堆线索。。。除非您的意思是要在后台使用多个线程构建一个新的TreeModel,然后一次性替换EDT上JTree的整个TreeModel,否则这将是一个非常糟糕的主意 Swing组件只能在E

我有一个非常大的JTree,我想浏览从根到叶的所有节点

我需要根据用户输入进行某种重组

例如,我希望所有用户对象字符串以“a”开头的节点在树中的新节点内重新分组

首字母: 根-安,约翰,安德鲁

之后: 根- 阿安 安得烈 约翰

我在考虑开始迭代,为每个节点启动一组线程,并在创建新节点时进行同步

有什么想法吗?

一堆线索。。。除非您的意思是要在后台使用多个
线程构建一个新的
TreeModel
,然后一次性替换EDT上
JTree
的整个
TreeModel
,否则这将是一个非常糟糕的主意


Swing组件只能在EDT上更改,因此,如果您要直接从放置在
JTree
上的
TreeModel
上的多个
Thread
重新排序节点,您很可能会像Robin所说的那样,最终损坏
JTree
,在多线程中直接在JTree上执行此操作将导致争用条件

你可以复制你的树模型并修改它。但是请注意,您仍然必须在线程之间进行同步。之后,您可以简单地调用SwingUtilities.invokeLater并将复制和修改的模型设置为JTree的新模型

另一个想法是对数据进行多线程分析,使用结果创建(线程安全)集合,并使用结果在EDT更改模型。有一个大的树和小的修改,这将是最快的方式(不复制,不完全重建树)

提示:如果您使用的是Java7,请查看Fork/Join框架。如果没有,尽管如此,还是要这样做以获得想法。实现应该足够简单,否则就会有实现