我有一个正在Swing中构建的应用程序。它具有可滚动和缩放的图表组件,可以平移和缩放它。整个过程很平滑,除了有时UI会暂停约750 ms,我不知道为什么。这种情况并非总是会发生-但有时应用程序中会发生某些事情,并且每6-8秒就会开始暂停一次。
很显然,EDT上有一些事件需要花费750毫秒左右的时间才能运行,这不应该发生。
我如何特别像这样配置EDT?我真正想做的是获取在每次事件在EDT上运行时输出到日志或System.out的信息以及事件所花费的总时间。有没有办法做到这一点?
还是有一些工具可以帮我实现这一目标,并为我提供在EDT上运行的所有内容的日志以及需要多长时间?
我想浏览一下该日志,查看花费很长时间的所有内容,然后找出问题所在。
创建一个这样的类:
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替换为自定义类:
Toolkit.getDefaultToolkit().getSystemEventQueue().push(new TimedEventQueue());