1

非EDTスレッドでDefaultMutableTreeNodeのユーザーオブジェクトを変更した場合、スレッドに関して何が起こるかを理解しようとしていますか?

DefaultTreeModelイベント、つまりinsertNodeIntoとremoveNodeFromParentについては話していません。これらは、常にEDTで実行する必要があることは明らかです...私は...

ノードのユーザーオブジェクトが変更された場合、JTree.TreeModelHandlerがそのようなイベントを「リッスン」しているように見えますが、リスナーはそのような変更のみが通知されると予想する理由があります。イベントが発生したスレッド?そして、その応答をその自己同一のスレッドでのみ伝播しますか?

したがって、明らかに、これはかなり基本的な「オブザーバー」パターンであると想定しています。

つまり、これは、JTreeのノードでのほとんどの変更が、実際にはEDTで発生する必要があることを意味します。そうしないと、予期したとおりに発生しないというリスクがあります。

DefaultMutableTreeNodeのAPIでは、実際に「独自の同期を行う必要があります」と書かれています...

4

1 に答える 1

4

Swingのスレッドルールは非常に単純です。Swingはシングルスレッドであり、Swingコンポーネントに関連するすべての操作はEDTで実行する必要があります。

したがって、TreeModel含まDefaultMutableTreeNodeれているがに設定されたらすぐJTreeに、モデル(またはノード)に加えた変更と、発生する対応するイベントがEDTで発生することを確認してください。

于 2012-06-17T17:14:53.590 に答える