方法SwingUtilities.invokeLater()的作用?

shouni 2003-05-21 11:26:52
方法SwingUtilities.invokeLater()的作用?(
...全文
30 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanmeng163 2003-05-21
  • 打赏
  • 举报
回复
Swing是线程不安全的,也就是说只能从单线程访问Swing组件。Swing单线程设计的结果,使得大多数情况下只能从事件派发线程(事件派发线程是调用paint和update等回调方法的线程,而且还是事件监听器接口中定义的事件处理方法,如actionPerformed方法。)中访问将要在屏幕上绘制的Swing组件。
但是,有时可能需要从事件派发线程以外的线程中更新Swing组件。比如你设计一个查询数据库的程序,当点查询按钮时,可能要执行一段比较耗时,假设你是在按钮的actionPerformed方法中处理查询的,那么这时候按钮一直按下状态,而且在事件处理方法返回之前,其他的事件不能派发。如果在独立的线程上执行象数据库查询等耗时的操作可能更好,这将允许立即更新用户界面和释放事件派发线程去派发别的事件。
SwingUtilities.invokeLater和invokeAndWait就是解决上述问题,它使事件派发线程上的可运行对象排队。当可运行对象排在事件派发队列的队首时,就调用其run方法。也就是允许事件派发线程调用另一个线程中的任意一个代码块。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧