-1

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

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

例如,我希望将用户对象字符串以“a”开头的所有节点重新组合到树内的一个新节点中。

首字母 : Root - Ann, John, Andrew

之后:Root - A - Ann Andrew J - John

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

有什么想法吗?

4

2 回答 2

3

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

Swing 组件只能在 EDT 上更改,因此如果您要Thread直接在TreeModel放置在您的 s 上的多个 s 上重新排序节点,您JTree很可能会以损坏的JTree.

于 2012-05-15T07:20:19.873 回答
0

正如 Robin 所说,在多个线程中直接在 JTree 上执行会导致竞争条件。

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

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

提示:如果您使用的是 Java 7,请查看 Fork/Join-Framework。如果没有,请尽管这样做以获得这个想法。实现应该很容易,否则周围有实现。

于 2012-05-15T07:49:13.833 回答