异步控制BusyIndi​​cator

Mar*_*nik 2 java swt eclipse-rcp

显然所有的Eclipse/SWT都有管理忙碌鼠标的方法

BusyIndicator.showWhile(Runnable synchronousStuffToDo)
Run Code Online (Sandbox Code Playgroud)

但是,我有一个基本上面向事件的项目,其中"要做的事情"不会在连续的执行行中发生:操作被​​排序并且持续回调被提供给执行管理器.因此,我没有任何意义可以投入到synchronousStuffToDo可运行的中.

是否存在另一种低级且笨拙,但与平台无关的异步操作繁忙指示器的方式,这意味着两个单独的方法调用,"激活它"和"停用它"?

我应该补充ProgressMonitorDialog这个问题,因为它似乎遇到了同样的问题.是的,在ProgressMonitorDialog#run方法中,内部事件循环将被旋转,但SWT事件循环只是我的执行管理器之一,因此链仍然会被破坏.显然没有这个课程我甚至不能显示进度监视器,除非我从较低级别的原语重新实现.

Nir*_*jan 6

您无法操纵Cursor使用BusyIndicator该类.您可以调用以下util方法在后台运行作业时显示忙碌图标Thread

public static void imBusy(final boolean busy){

    Display.getDefault().asyncExec(new Runnable()
    {
        @Override
        public void run()
        {
            Shell shell = Display.getDefault().getActiveShell();
            if(busy){ //show Busy Cursor
                Cursor cursor = Display.getDefault().getSystemCursor(SWT.CURSOR_WAIT);          
                shell.setCursor(cursor);
            }else{  
                shell.setCursor(null);
            }   
        }
    });

}
Run Code Online (Sandbox Code Playgroud)