我正在编写一个Eclipse RCP应用程序,除了我自己之外还有其他插件贡献,需要确定应用程序何时空闲(即一段时间没有活动,应用程序最小化等),以及何时更改(即应用程序返回到前台,单击鼠标等)。
我遇到的问题是我要捕获所有应用程序击键和鼠标移动/点击...使用它来重置计时器,当计时器被击中时,可能会发生一些空闲处理(即通知)闲置的服务器 - 然后当我们切换到活动状态时 - 再没有密集)。但是,应用程序窗口shell不会收到各种视图的子事件等,所以要么我丢失了一些东西,要么这是错误的方法。
有人能提供解决方案吗?我不是在寻找系统范围的空闲 - 只是应用程序空闲。
感谢。
答案 0 :(得分:2)
Eclipse IDE已经有类似于执行垃圾收集的东西了,看看Bundle org.eclipse.ui.ide.application中的类org.eclipse.ui.internal.ide.application.IDEIdleHelper
答案 1 :(得分:1)
当没有更多要处理的消息时,您可以使用readAndDispatch
方法将返回false的事实。像这样:
long lastActivityAt = 0;
int idleThresholdSecs = 5;
while (true)
{
while (display.readAndDispatch())
{
lastActivityAt = System.nanoTime();
}
if (System.nanoTime() - lastActivityAt > idleThresholdSecs * 1000 * 1000 * 1000)
{
// we have been idle for at least "idleThresholdSecs"
...
}
else
{
Thread.sleep(50);
}
}
答案 2 :(得分:1)
也许那个
display.addFilter(SWT.MouseDown, new Listener() {
@Override
public void handleEvent(Event event) {
}
});
是您正在寻找的(您也可以添加其他活动)?
在事件处理以组件方式完成之前执行...
但一般不建议使用它 - 它应该是一个非常有限的用例,所以。