关于为什么要加EventQueue.invokeAndWait的思考

集合上网搜索的各种结果,做个总结什么的:

第一:java的GUI都是的单线程,应该使用事件调度线程去执行,如果没意思使用事件调度线程的话,可能造成死锁。但是在小的程序中,这种现象(死锁)不会发生的;大的应用程序中才会出现这种现象!

第二:public class EventQueueextends ObjectEventQueue 是一个与平台无关的类,它将来自于底层同位体类和受信任的应用程序类的事件列入队列。

第三:在Java中Swing是线程不安全的,是单线程的设计,这样的造成结果就是:只能从事件派发线程访问将要在屏幕上绘制的Swing组件。事件派发线程是调用paint和update等回调方法的线程,它还是事件监听器接口中定义的事件处理方法,例如,ActionListener中的actionPerformed方法在事件派发线程中调用。
Swing是事件驱动的,所以在回调函数中更新可见的GUI是很自然的事情,比如,有一个按钮被按下,项目列表需要更新时,则通常在与该按钮相关联的事件监听器的actionPerformed方法中来实现该列表的更新,从事件派发线程以外的线程中更新Swing组件是不正常的。
有时需要从事件派发线程以外的线程中更新Swing组件,例如,在actionPerformed中有很费时的操作,需要很长时间才能返回,按钮激活后需要很长时间才能看到更新的列表,按钮会长时间保持按下的状态只到actionPerformed返回,一般说来耗时的操作不应该在事件处理方法中执行,因为事件处理返回之前,其他事件是不能触发的,界面类似于卡住的状况,所以在独立的线程上执行比较耗时的操作可能更好,这会立即更新用户界面和释放事件派发线程去派发其他的事件。
SwingUtilities类提供了两个方法:invokeLate和invoteAndWait,它们都使事件派发线程上的可运行对象排队。当可运行对象排在事件派发队列的队首时,就调用其run方法。其效果是允许事件派发线程调用另一个线程中的任意一个代码块。 只有从事件派发线程才能更新组件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "eventqueue.incokelater" 是一个函数或方法,用于在 JavaScript 中延迟执行一个函数。它将一个函数添加到事件队列中,以便在当前执行栈中的所有任务完成后执行该函数。这可以用于在执行一些较慢或资源密集型的任务后,允许浏览器先完成其他任务,以提高用户体验。 在使用 "eventqueue.incokelater" 时,需要传入两个参数:要执行的函数以及延迟的时间(以毫秒为单位)。例如,以下代码将在延迟 1000 毫秒后执行一个函数: ``` eventqueue.incokelater(function() { console.log("Delayed function executed"); }, 1000); ``` ### 回答2: eventqueue.incokelater 是一个在事件队列中延迟执行事件的函数。它的作用是将指定的事件添加到事件队列中,并在下一次事件循环时执行。 在某些情况下,我们可能希望将某个事件的执行延迟到下一个事件循环中。例如,在处理用户交互时,我们可能需要等待当前的事件处理完成后再执行一些其他操作,这时就可以使用 eventqueue.incokelater。 具体实现方面, eventqueue.incokelater 接受两个参数:要延迟执行的事件和延迟的时间。第一个参数可以是一个函数或者代码块,用于表示要执行的事件。第二个参数是一个表示延迟时间的数字,单位通常是毫秒。 当调用 eventqueue.incokelater 后,它会将待执行的事件添加到事件队列中,并在下一个事件循环中执行。这样可以确保当前事件处理完毕后再执行指定的事件,避免了嵌套调用或者事件冲突的问题。 总之, eventqueue.incokelater 是一个在事件队列中延迟执行事件的函数,能够确保待执行的事件在下一个事件循环中得以正确执行。通过使用这个函数,我们可以更好地控制事件的执行顺序和时间,提高程序的稳定性和可靠性。 ### 回答3: eventqueue.incokelater是一个JavaScript中的函数,用于在事件循环队列中延迟执行一个函数。 在JavaScript中,事件循环是一种机制,用于管理和调度待执行的事件。当浏览器执行JavaScript代码时,会将事件和回调函数放入事件队列中,按照顺序依次执行。 eventqueue.incokelater函数可以用来将一个函数推入事件队列以延迟执行。它的参数通常包括要执行的函数和一个延迟的时间间隔。当调用eventqueue.incokelater时,它会将要执行的函数封装成一个事件,并将其插入到事件队列中。 特别是,eventqueue.incokelater函数通常用于在等待指定的时间间隔后执行一个函数,例如在用户操作后延迟更新界面,或者在等待一段时间后执行一些后台任务。 使用eventqueue.incokelater时,我们可以控制函数执行的时间,以便在适当的时候执行函数,不会对主线程的执行造成阻塞。这样可以提高用户体验,并且确保代码的流畅运行。 总之,eventqueue.incokelater是一个用于延迟执行函数的函数,通过将函数封装成事件并插入事件队列,可以在指定的时间间隔后执行函数,以提高代码的性能和用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值