Java Swing中GUI代码的线程同步

本文介绍了在Java Swing中如何进行GUI代码的线程同步,强调了Event-Dispatching Thread的重要性。SwingUtilities的invokeLater()和invokeAndWait()方法用于确保在正确的线程中执行GUI代码,避免死锁。SwingWorker和Timer类可以解决长时间运行任务对响应速度的影响,SwingWorker在后台线程执行耗时任务,并在完成后更新UI。同时,文章提供了使用Timer进行定时更新组件的建议。
摘要由CSDN通过智能技术生成

GUI代码的线程同步

Swing组件的事件处理和绘画代码,都是被一个线程依次调用的,
这样保证事件处理的同步执行。
这个线程就是 Event-Dispatching Thread。

为了避免可能的死锁,确保Swing组件和model的创建、修改和查找
只在Event-dispatching Thread中调用。

SwingUtilities的invokeLater(Runnable),invokeAndWait(Runnable)
都是将GUI代码加入Event-dispatching Thread的方法。

invokeLater()立即返回,而invokeAndWait()阻塞,直到Event-dispatching Thread
执行完指定的GUI代码。
invokeAndWait()方法也有导致deadlock的可能,尽量使用invokeLater()。

About Realized
Realized means that the component has been painted on screen, or is ready to be painted.
setVisible(true) and pack() cause a window to be realized, which in turn causes the components it contains to be realized.

同步会导致等待,当一个事件处理时间太长,后面的事件处理就得不到响应,给人响应不灵敏的感觉。
SwingWorker或者Timer类可以解决缓解这个问题,
其中SwingWorker是java-tutorials定义的类&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值