Просто пытаетесь выяснить, что происходит, с точки зрения потоков, если вы изменяете объект пользователя DefaultMutableTreeNode в потоке, отличном от EDT?Как реагирует JTree на измененный DefaultMutableTreeNode?
Я не говорю о событиях DefaultTreeModel, а именно insertNodeInto и removeNodeFromParent, что я довольно ясно, всегда должен быть запущен в EDT ... я думаю ...
В случае изменения в пользовательских объектах узлов, похоже, что JTree.TreeModelHandler - это то, что «слушает» такие события ... но есть ли причина ожидать, что слушатель будет уведомлен только о таком изменении в потоке, где событие получилось? И будет распространять свой ответ только в той же самой теме?
Очевидно, поэтому я предполагаю, что это довольно простой шаблон «наблюдателя».
Значит ли это, что большинство изменений в узлах JTree на самом деле должно произойти в EDT, в противном случае, что-то не происходит, когда и когда вы ожидаете?
В API для DefaultMutableTreeNode это действительно говорит, что «вы должны сделать свою собственную» синхронизацию ...
'JTree' особенно чувствителен к этому важному принципу; см. также [Начальные потоки] (http://download.oracle.com/javase/tutorial/uiswing/concurrency/initial.html). – trashgod
спасибо ... в каком-то смысле я удивляюсь, почему большинство/все методы JTree (и другие JComponent) не включали в себя тест isEventDispatchThread() ... и запрещают вызовы без EDT ... –
@mikerodent В JavaFX они позаботились об этом. Вы можете сделать это самостоятельно, установив пользовательский менеджер перерисовки (см. [Эту статью] (http://weblogs.java.net/blog/alexfromsun/archive/2006/02/debugging_swing.html)) – Robin