JFace :: TreeViewer :: setInput() - > long processing和hourglass-cursor - 即使使用null作为参数

时间:2014-05-02 16:15:03

标签: java swt jface viewer treeviewer

我正在编写一个Eclipse-JFace-TreeViewer并且最近注意到,每当我调用setInput()时,UI线程被占用至少10~30ms,无论设置什么输入。调用setInput(null)时,处理也需要很长时间。

我还使用虚拟内容提供程序对TreeViewer进行了最小化的实现。 问题仍然存在。你可以自己试试。也许它只在我的系统上。 看看下面的代码。要刷新查看器,只需单击它即可。 如果你的系统也有错误,光标应闪烁并显示沙漏图标。

package de.stef.swttools.test;

import org.eclipse.jface.viewers.*;

public class Test {

protected Shell shell; public static void main(String[] args) { new Test().open(); } public void open() { Display display = Display.getDefault(); createContents(); shell.open(); shell.layout(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } protected void createContents() { shell = new Shell(); shell.setSize(400, 400); shell.setLayout(new FillLayout(SWT.HORIZONTAL)); final TreeViewer treeViewer = new TreeViewer(shell, SWT.VIRTUAL); treeViewer.setContentProvider(new ITreeContentProvider() { @Override public void dispose() { } @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } @Override public Object[] getElements(Object inputElement) { return new Object[] {}; } @Override public Object[] getChildren(Object parentElement) { return new Object[] {}; } @Override public Object getParent(Object element) { return null; } @Override public boolean hasChildren(Object element) { return false; } }); treeViewer.getTree().addMouseListener(new MouseAdapter() { @Override public void mouseDown(MouseEvent e) { treeViewer.setInput(null); } }); }

}

0 个答案:

没有答案