Eri*_*son 4 java swing profiling event-dispatch-thread
我有一个应用程序,我正在Swing中构建.它有一个可滚动和可缩放的图表组件,我可以平移和放大.整个过程是顺利的,除了有时UI将暂停约750毫秒,我不知道为什么.这并不总是发生 - 但有时在应用程序中会发生某些事情,并且每隔6-8秒开始就像这样暂停一次.
很明显,EDT上有一些事件正在运行750毫秒左右,这应该不会发生.
我如何具体地描述EDT?我真正想要做的是每当事件在EDT上运行时,将事件所花费的总时间量输出到日志或System.out.有没有办法做到这一点?
或者是否有一些工具可以为我做这个并给我一个在EDT上运行的所有内容的日志以及需要多长时间?
我想通过这个日志,查看花费很长时间的所有内容,并找到问题所在.
看看这个问题.它描述了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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后用自定义类替换默认的EventQueue:
Toolkit.getDefaultToolkit().getSystemEventQueue().push(new TimedEventQueue());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1350 次 |
最近记录: |