0

I'am writing an Eclipse-JFace-TreeViewer and noticed recently, that everytime I call setInput() the UI threads is occupied for at least 10~30ms, regardless what input is set. It also takes very long to process when setInput(null) is called.

I also made a minimal implementation of a TreeViewer with a dummy-content-provider. The problem still remains. You can try it yourself. Maybe it's only on my system. Check out the code beneath. To refresh the viewer just click on it. If it's buggy on your system too, the cursor should flicker and show the hourglass icon.

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 Answers0