1

只是想弄清楚如果您在非 EDT 线程中更改 DefaultMutableTreeNode 的用户对象,就线程而言会发生什么?

我不是在谈论 DefaultTreeModel 事件,即 insertNodeInto 和 removeNodeFromParent,我很清楚它们应该始终在 EDT 中运行......我认为......

在节点的用户对象发生更改的情况下,似乎 JTree.TreeModelHandler 是“侦听”此类事件的东西......但是有理由期望侦听器只会被通知此类更改事件发生在哪里?并且只会在同一个线程中传播它的响应?

因此,显然,我假设这是一个相当基本的“观察者”模式。

那么这是否意味着 JTree 节点中的大多数更改实际上必须发生在 EDT 中,否则会有事情不会按您预期的时间发生的风险?

在 DefaultMutableTreeNode 的 API 中,它确实说“你必须自己进行同步”......

4

1 回答 1

4

Swing 线程规则非常简单:Swing 是单线程的,所有涉及 Swing 组件的操作都应该发生在 EDT 上。

因此,一旦在 a 上设置了TreeModel包含DefaultMutableTreeNodes,JTree您最好确保对模型(或节点)所做的任何更改以及触发的相应事件都发生在 EDT 上。

于 2012-06-17T17:14:53.590 回答