LabelProvider的cell.setImage()需要太长时间

时间:2013-09-24 11:41:12

标签: java swt jface

我正在开发一个Eclipse RCP应用程序插件,并且遇到TreeViewer的问题,在某个点上,它有一个包含很多子元素的Tree Item。在这种情况下,它是4000。

TreeViewerContentProviderLabelProvider和输入(在本例中为modelprovider)。

4000个元素的cell.setImage(...) StyledCellLabelProvider方法中的update(ViewerCell cell)方法需要花费几秒钟的时间。我试过跳过它和 TreeViewer没有问题......

我还考虑通过调用:

在单独的线程中进行更新
Display.getDefault().asyncExec(new UpdateItems(list));

和Runnable ......

private class UpdateItems implements Runnable {
        private List<Element> elementList;
        private UpdateItems(List<Element> elementList) {
            this.elementList = elementList;
        }
            @Override
            public void run() {
                System.out.println("It's running!!!!");
                for (Element e : elementList) {
                    Signal s = (Signal) e;
                    s.setShowIcon(true);

                    s.updateElement(); //this calls an update on the item
                }
            }

    }

但是这样,当我尝试使用滚动查看下面的元素时,窗口会冻结直到完成。

是否可以在TreeViewer上添加侦听器,以便在TreeItem可见时触发更新?并且通过可见我的意思是它在当前视图内的用户的视线内,在当前滚动的位置(希望这是有意义的)。

感谢任何支持和意见!

0 个答案:

没有答案