如何在Java Swing中实现空闲任务

2023-12-02

我有一个 GUI 应用程序变得非常慢。我想开始介绍各种 GUI 任务的计时 - 然而,我们的许多 GUI 操作会触发其他操作,然后“稍后调用”以触发其他操作。

最终,一切都平静下来,没有什么可做的。此时,我想停止计时器并报告 GUI“操作”花费了多长时间。

我想做到这一点的方法是实现一个名为invokeOnceIdle(Runnable task)。仅当 AWTEventQueue 为“空”时,该方法才会执行所提供的任务。即提供的“任务”应该是队列中的最后一个任务。

做到这一点的一种方法是,是否有一种方法可以指定“最低”优先级SwingUtilities.invokeLater- 但这是不可能的。

接下来我查看是否可以“invokeLater”一个 Runnable 来检查事件队列是否为“空” - 但没有公共方法来查看事件队列是否实际上为空。

最好的方法是什么?


使用您自己的事件队列,您可以轻松实现该目标。这是我准备的一些东西,应该可以帮助你:

private static class MyEventQueue extends EventQueue {

    private Deque<Runnable> onceIdle = new LinkedList<Runnable>();

    public MyEventQueue() {
        Toolkit.getDefaultToolkit().getSystemEventQueue().push(this);
    }

    public void runOnceIdle(Runnable toRun) {
        onceIdle.addLast(toRun);
    }

    @Override
    protected void dispatchEvent(AWTEvent event) {
        super.dispatchEvent(event);
        if (peekEvent() == null) {
            for (Runnable toRun : onceIdle) {
                toRun.run();
            }
            onceIdle.clear();
        }
    }
}

您所要做的就是使用以下命令将“一旦空闲”可运行对象推送到 EventQueue 的实例runOnceIdle()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Java Swing中实现空闲任务 的相关文章

随机推荐

  • 如何将文本附加到 QPlainTextEdit 而不添加换行符,并保持滚动在底部?

    我需要将文本附加到QPlainTextEdit无需在文本中添加换行符 但这两种方法appendPlainText and appendHtml 实际上添加了新段落 我可以手动执行此操作QTextCursor QTextCursor text
  • fread/fwrite 大小和计数[重复]

    这个问题在这里已经有答案了 我对用于 fread fwrite 的参数大小和计数的顺序有疑问 如果我想从文件fp中读取8kb的数据 下面哪种方式效率更高 fread data 1 8192 fp fread data 8192 1 fp 还
  • 如何检查文件夹中是否存在文件?

    我需要检查文件夹中是否存在 xml 文件 DirectoryInfo di new DirectoryInfo ProcessingDirectory FileInfo TXTFiles di GetFiles xml if TXTFile
  • 如何安排每月第一个周日跑步

    我在 RedHat 上使用 Bash 我需要安排一个 cron 作业在每月第一个星期日上午 9 00 运行 我怎样才能做到这一点 你可以把这样的东西放在crontab file 00 09 7 date d le 07 run your s
  • 搜索电子邮件地址时 MySQL MATCH AGAINST

    我正在编写新闻通讯脚本 我需要在地址中实现搜索 我使用 FULLTEXT 对表建立了索引 但是当我执行以下查询时 SELECT FROM addresses WHERE MATCH email AGAINST email protected
  • Android 弹跳球

    所以我只是想让一个球在屏幕上弹跳 它会因为重力而减慢速度 并像普通球一样从墙上反射 弹跳 有人可以提供一些基础知识和非常简单的实现吗 其他例子似乎有点 过头 似乎超出了我想做的事情 我试过这个 public void updateLogic
  • Javascript:四舍五入到下一个 5 的倍数

    我需要一个实用函数 它接受一个整数值 长度范围从 2 到 5 位数字 并向上舍入到next5的倍数而不是nearest5 的倍数 这是我得到的 function round5 x return x 5 gt 2 5 parseInt x 5
  • C++ 多重继承私有成员不明确访问

    下面的代码 class A1 public int x class A2 private int x return 67 class M public A1 public A2 int main M m m x 编译有错误 error C2
  • Windows 8 Metro 风格应用程序中 .NET GeoCooperative.GetDistanceTo 的等效项

    Metro 风格 Windows 8 应用程序中的 System Device Location GeoCooperative GetDistanceTo 方法等效于什么 Metro 应用程序具有地理坐标类 带有小写的 C 但没有 GetD
  • 在 Typescript 中向现有模块添加定义

    我正在努力使用 Typescript 并修改现有模块的定义 我们习惯将任何想要输出的内容放入 res out 最后有类似 res json res out 的内容 这使我们能够在发送响应时对应用程序进行总体控制 所以我有这样的功能 expo
  • 如何在列表中的多个数据帧上使用 lapply 和粘贴

    我无法结合使用 lapply 和 Paste 来组合列表中包含的多个数据帧的两列 我查看了多个来源 但找不到答案 这个答案将粘贴应用于向量列表以获取字符串列表是关于组合列表中的行 而不是组合列来获得向量 这个答案解释了如何选择列但不将它们粘
  • 在 C 中使用 malloc 为 typedef 类型分配空间

    我不确定我到底需要用什么作为参数malloc来分配空间table allocate int 功能 我只是想count table cTable malloc sizeof count table 但这对 size 参数没有任何作用 我应该为
  • 基于 R 中的色相、饱和度、值来排序颜色

    这道题是R和色彩理论的结合 我尝试根据色相 h 饱和度 s 最后值 v 来排序颜色 这是本文末尾代码中的绘制颜色和数据框 Painted 数据框 1 2 3 4 5 h 0 6229508 0 2767296 0 1323283 0 979
  • iOS 版本特定的 info.plist 设置

    我正在更新 iOS 7 的应用程序 同时仍然支持 iOS 6 并且已更新状态栏以使用白色前景UIStatusBarStyle UIStatusBarStyleLightContent 但是 那UIStatusBarStyleLightCon
  • 混淆 ID

    我正在寻找一种将整数 ID 加密 混淆为另一个整数的方法 更准确地说 我需要一个函数int F int x 以便 xF x 是一一对应的 如果 x y F x F y 给定 F x 很容易找出 x 所以 F 不是哈希函数 给定 x 和 F
  • 如何设置 Azure CNAME

    我正在 Azure 上设置 VPS 但一直停留在配置 CNAME 上 该网站已向第三方注册 我已设置以下内容 NAME TYPE TTL VALUE NS 120 ns1 01 azure dns com etc SOA 3600 azur
  • Terraform - 在 Azure 上配置静态 IP 地址

    我已经使用 Terraform 一段时间了 并且对它与 VMware 和 Azure 提供商的使用感到满意 目前 我需要在 Azure 中使用静态 IP 地址配置 VM 试图说服他们摆脱静电 但有人对我使用了安全锤 我无法偏转 虽然我可以在
  • iPhone SDK 是否有可用的 GKVoiceChat 示例?

    我正在寻找 4 0 或更高版本的 iPhone SDK 的 GKVoiceChat 示例 它肯定会对我的 iPhone 游戏有所帮助 我见过两个游戏套件示例 其中包括 GKVoiceChat 在 Apple 开发者论坛中搜索 GCPing
  • 如何将 async/await 与使用基于事件的异步模式的库一起使用?

    我使用的库有一个名为 DoWork 的异步方法 该方法将在操作完成时引发 WorkDone 事件 我想编写一个调用该库的方法 但我希望我的方法是async所以可以用await 本质上 我想做的是 public async Task
  • 如何在Java Swing中实现空闲任务

    我有一个 GUI 应用程序变得非常慢 我想开始介绍各种 GUI 任务的计时 然而 我们的许多 GUI 操作会触发其他操作 然后 稍后调用 以触发其他操作 最终 一切都平静下来 没有什么可做的 此时 我想停止计时器并报告 GUI 操作 花费了