Eclipse RCP应用程序 - 如何检测应用程序何时空闲?

时间:2011-01-05 14:33:56

标签: java eclipse eclipse-rcp rcp

我正在编写一个Eclipse RCP应用程序,除了我自己之外还有其他插件贡献,需要确定应用程序何时空闲(即一段时间没有活动,应用程序最小化等),以及何时更改(即应用程序返回到前台,单击鼠标等)。

我遇到的问题是我要捕获所有应用程序击键和鼠标移动/点击...使用它来重置计时器,当计时器被击中时,可能会发生一些空闲处理(即通知)闲置的服务器 - 然后当我们切换到活动状态时 - 再没有密集)。但是,应用程序窗口shell不会收到各种视图的子事件等,所以要么我丢失了一些东西,要么这是错误的方法。

有人能提供解决方案吗?我不是在寻找系统范围的空闲 - 只是应用程序空闲。

感谢。

3 个答案:

答案 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) {
        }
    });

是您正在寻找的(您也可以添加其他活动)?

在事件处理以组件方式完成之前执行...

一般不建议使用它 - 它应该是一个非常有限的用例,所以。