如果在非EDT线程中更改DefaultMutableTreeNode的用户对象,只是试图弄清楚线程方面会发生什么?
我不是在谈论DefaultTreeModel事件,即insertNodeInto和removeNodeFromParent,我很清楚应该总是在EDT中运行... 我认为......
在更改节点的用户对象的情况下,似乎JTree.TreeModelHandler是“监听”此类事件的东西......但是有理由期望只会通知侦听器这样的事件更改事件发生的线程?并且只会在那个自相同的线程中传播它的响应吗?
因此,显然,我假设这是一个相当基本的“观察者”模式。
这是否意味着JTree节点中的大多数变化实际上必须在EDT中发生,否则会发生在您预期的情况下未发生的事情的风险?
在DefaultMutableTreeNode的API中确实说“你必须自己进行同步”......
答案 0 :(得分:4)
Swing线程规则非常简单:Swing是单线程的,所有涉及Swing组件的操作都应该在EDT上进行。
因此,只要在TreeModel
上设置了包含DefaultMutableTreeNode
的{{1}},您就可以更好地确保对模型(或节点)所做的任何更改以及相应的事件在美国东部时间被解雇了。