gpt4 book ai didi

java - 在 Swing 中,您可以将事件发布到 EDT 事件队列的顶部吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:37:25 25 4
gpt4 key购买 nike

我正在寻找一种方法来完成 InvokeLater() 函数所做的事情,而不是将事件放在事件队列的底部,而是将它放在顶部。至少我认为那会做我想做的,也许有更好的方法。下面描述了我要复制的内容。

几年前,我在 Mac 上使用了一个 c++ 框架,它具有在处理当前事件时可以将 Chore 对象添加到 CriticalChore 列表的功能。您将在执行相当于 Swings EDT 的代码时执行此操作。当前事件处理完毕后,就在调用 GetNextEvent() 之前,框架将检查 CriticalChore 列表是否为空。如果列表中有项目,则将调用 Perform()(即 run())函数。完成列表后,所有项目都会被删除。

此功能非常方便。很多时候,在早期处理一个事件时,您知道您需要执行一些额外的代码,但只有在处理了大量其他代码之后。但最重要的是,是否需要在处理 EDT 队列中的任何其他事件之前处理此代码。

最佳答案

我没有看到任何方法可以做到这一点。我想你可以做一些 hacky 的东西来制作你自己的注入(inject)更高优先级操作的方法。

不过,我认为最好的答案是根本不这样做。如果您需要这样做,则可能需要重新设计设计。 EventDispatchThread 应该只用于运行时间非常短的操作,因为它永远不会让最终用户看到应用程序已卡住。因此,EDT 队列应始终足够短,以便从用户的角度来看,您放入其中的任何内容都会“立即”发生,因此其上的所有内容都应具有“即时”优先级。

如果需要完成任何不是非常短暂的操作,则可以使用单独的方法来完成。有一个 Swing Worker类,你应该使用它来设置与 EDT 一起运行的任务并监听它的响应。

这是一个Swing Worker Tutorial . Google 通过“Java SwingWorker 教程”查询还提供了一些其他好的内容。

关于java - 在 Swing 中,您可以将事件发布到 EDT 事件队列的顶部吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6527958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com