如果您在非EDT线程中更改DefaultMutableTreeNode的用户对象,那么在线程方面会发生什么呢?
我说的不是DefaultTreeModel事件,即insertNodeInto和removeNodeFromParent,我非常清楚,这些事件应该总是在EDT中运行。我想..。
在节点用户对象更改的情况下,JTree.TreeModelHandler似乎是“侦听”此类事件的对象.但是,是否有理由期望侦听器只被通知事件发生的线程中的这样一个更改?它的反应只会在同一条线上传播吗?
因此,显然,我假设这是一个相当基本的“观察者”模式。
那么,这是否意味着JTree节点中的大多数更改实际上必须发生在EDT中,否则就有可能在您预期的情况下发生不发生的事情?
在API for DefaultMutableTreeNode中,它确实表示“您必须自己进行同步”.
发布于 2012-06-17 17:14:53
Swing线程规则非常简单: Swing是单线程的,所有涉及Swing组件的操作都应该发生在EDT上。
因此,一旦在TreeModel上设置了包含DefaultMutableTreeNode的DefaultMutableTreeNode,您最好确保对模型(或节点的)所做的任何更改以及相应的事件发生在EDT上。
https://stackoverflow.com/questions/11072423
复制相似问题