悬浮菜单及树问题
问题要求如下:在树上点出悬浮菜单,选择 "增加子节点 ",生成100个节点,要求100个节点在生成过程中动态地显示到树中,但现在情况是:1,只有所有节点生成后,才一起显示出来. 2,在所有节点没有生成时,悬浮菜单一直保持,仅当所有节点生成后,悬浮菜单才消失.
------解决方案--------------------典型的Swing/AWT Event Dispatch Thread长时间占用问题。
处理事件的方法在没有返回以前,AWT的EventQueue所有后续事件,包括PAINT事件是被阻塞的,因此你的界面是不能刷新的,虽然你已经更新了树的model。
在Swing/AWT包括SWT编程中要注意,对于长时间大工作量任务的处理要注意两个问题:
* Time-consuming tasks should not be run on the Event Dispatch Thread. Otherwise the application becomes unresponsive.
消耗事件的任务不要放在Event Dispatch Thread上运行。否则界面就会僵死。
* Swing components should be accessed on the Event Dispatch Thread only.
Swing组件的访问只能在Event Dispatch Thread来完成。
在JDK 5和JDK 6中引入了一个新的类叫SwingWorker,是专门解决这种问题。详细的内容可以参见java API帮助:
http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/builds/latest/html/zh_CN/api/javax/swing/SwingWorker.html