首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Swing中分析EDT?

如何在Swing中分析EDT?
EN

Stack Overflow用户
提问于 2011-04-05 00:33:09
回答 3查看 1.4K关注 0票数 4

我有一个正在用Swing构建的应用程序。它有一个可滚动和可缩放的图表组件,我可以平移和放大。整个过程很顺利,除了有时UI会暂停大约750ms,我不知道为什么。这并不总是发生-但有时在应用程序中发生了一些事情,它开始像这样每6-8秒暂停一次。

似乎很明显,有一些事件被放置在EDT上,大约需要750毫秒才能运行,这不应该发生。

我如何具体地分析EDT?我真正想做的是获得一些东西,每次事件在EDT上运行时都会输出到日志或System.out中,并记录事件所用的总时间。有没有办法做到这一点?

或者有没有什么工具可以帮我做到这一点,并给我一个在EDT上运行的所有东西的日志,以及它需要多长时间?

我想浏览一下这个日志,看看花了很长时间的所有事情,然后找出问题所在。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-05 00:56:34

看看这个question。它描述了EDT上的一个简单日志。

像这样创建一个类:

代码语言:javascript
复制
public class TimedEventQueue extends EventQueue {
    @Override
    protected void dispatchEvent(AWTEvent event) {
        long startNano = System.nanoTime();
        super.dispatchEvent(event);
        long endNano = System.nanoTime();

        if (endNano - startNano > 50000000)
            System.out.println(((endNano - startNano) / 1000000)+"ms: "+event);
    }
}

然后用自定义类替换默认的EventQueue:

代码语言:javascript
复制
Toolkit.getDefaultToolkit().getSystemEventQueue().push(new TimedEventQueue());
票数 9
EN

Stack Overflow用户

发布于 2011-04-05 00:42:12

确保您在EDT中只运行与GUI相关的操作,并且EDT中没有长时间运行的任务。有一个叫做SwingExplorer的很棒的工具,它有一个特性可以用来监控EDT操作。希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2011-04-05 00:44:43

我想说,这很可能不是EDT上的东西,而是垃圾收集。

假设是这样的话,恐怕我不知道任何解决方案。实际上,我从来没有在Swing中编写过没有这种行为的东西。

要尝试调试,您可以子类化EventQueue并使用以下命令安装一个新的:

Toolkit.getDefaultToolkit().getSystemEventQueue().push(xxx);

这应该允许您至少看到EDT正在处理哪些事件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5541493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档