org.eclipse.core.runtime.AssertionFailedException:断言失败:在 TreeViewer 中
org.eclipse.core.runtime.AssertionFailedException: assertion failed: in TreeViewer
我正在努力学习 Treeviewer。但是,在 运行 编译代码时,我在执行该行时遇到错误 -
treeViewer.setContentProvider(new AddressContentProvider());
下面是我为 View-
创建的全部代码
public class ViewPart1 extends ViewPart {
public static final String ID = "HelloWorld.view1";
TreeViewer treeViewer;
public ViewPart1() {
// TODO Auto-generated constructor stub
}
@Override
public void createPartControl(Composite parent) {
Tree addressTree = new Tree(parent, SWT.BORDER | SWT.H_SCROLL
| SWT.V_SCROLL);
addressTree.setHeaderVisible(true);
TreeColumn column1 = new TreeColumn(addressTree, SWT.LEFT);
addressTree.setLinesVisible(true);
column1.setAlignment(SWT.LEFT);
column1.setText("Land/Stadt");
column1.setWidth(160);
TreeColumn column2 = new TreeColumn(addressTree, SWT.RIGHT);
column2.setAlignment(SWT.LEFT);
column2.setText("Person");
column2.setWidth(100);
TreeColumn column3 = new TreeColumn(addressTree, SWT.RIGHT);
column3.setAlignment(SWT.LEFT);
column3.setText("m/w");
column3.setWidth(35);
treeViewer = new TreeViewer(addressTree);
treeViewer.setContentProvider(new AddressContentProvider());
treeViewer.setLabelProvider(new TableLabelProvider());
List<City> cities = new ArrayList<City>();
cities.add(new City());
treeViewer.setInput(cities);
treeViewer.expandAll();
}
@Override
public void setFocus() {
// TODO Auto-generated method stub
}
}
My AddressContentProvider Class looks like this -
public class AddressContentProvider implements IContentProvider {
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof List)
return ((List<?>) parentElement).toArray();
if (parentElement instanceof City)
return ((City) parentElement).getStreets();
if (parentElement instanceof Street)
return ((Street) parentElement).getHouses();
return new Object[0];
}
public Object getParent(Object element) {
if (element instanceof Street)
return ((Street) element).city;
if (element instanceof House)
return ((House) element).street;
return null;
}
public boolean hasChildren(Object element) {
if (element instanceof List)
return ((List<?>) element).size() > 0;
if (element instanceof City)
return ((City) element).getStreets().length > 0;
if (element instanceof Street)
return ((Street) element).getHouses().length > 0;
return false;
}
public Object[] getElements(Object cities) {
return getChildren(cities);
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
}
当我尝试 运行 这个时,我收到了这个错误 -
!ENTRY org.eclipse.e4.ui.workbench 4 0 2015-08-27 10:10:25.121
!MESSAGE
!STACK 0
org.eclipse.core.runtime.AssertionFailedException: assertion failed:
at org.eclipse.core.runtime.Assert.isTrue(Assert.java:110)
at org.eclipse.core.runtime.Assert.isTrue(Assert.java:96)
at org.eclipse.jface.viewers.AbstractTreeViewer.assertContentProviderType(AbstractTreeViewer.java:2385)
at org.eclipse.jface.viewers.TreeViewer.assertContentProviderType(TreeViewer.java:345)...
可能的原因是什么?
编辑:当我在视图 class 中编写 AddressContentProvider class 时,它工作得很好。但是,我在其他文件中写这个 class,它不起作用:(
Tree 的内容提供者必须实现 ITreeContentProvider
,IContentProvider
是不够的。
虽然您已经实现了树内容提供者的方法,但您实际上必须声明 class 实现了 ITreeContentProvider
.
我正在努力学习 Treeviewer。但是,在 运行 编译代码时,我在执行该行时遇到错误 -
treeViewer.setContentProvider(new AddressContentProvider());
下面是我为 View-
创建的全部代码public class ViewPart1 extends ViewPart {
public static final String ID = "HelloWorld.view1";
TreeViewer treeViewer;
public ViewPart1() {
// TODO Auto-generated constructor stub
}
@Override
public void createPartControl(Composite parent) {
Tree addressTree = new Tree(parent, SWT.BORDER | SWT.H_SCROLL
| SWT.V_SCROLL);
addressTree.setHeaderVisible(true);
TreeColumn column1 = new TreeColumn(addressTree, SWT.LEFT);
addressTree.setLinesVisible(true);
column1.setAlignment(SWT.LEFT);
column1.setText("Land/Stadt");
column1.setWidth(160);
TreeColumn column2 = new TreeColumn(addressTree, SWT.RIGHT);
column2.setAlignment(SWT.LEFT);
column2.setText("Person");
column2.setWidth(100);
TreeColumn column3 = new TreeColumn(addressTree, SWT.RIGHT);
column3.setAlignment(SWT.LEFT);
column3.setText("m/w");
column3.setWidth(35);
treeViewer = new TreeViewer(addressTree);
treeViewer.setContentProvider(new AddressContentProvider());
treeViewer.setLabelProvider(new TableLabelProvider());
List<City> cities = new ArrayList<City>();
cities.add(new City());
treeViewer.setInput(cities);
treeViewer.expandAll();
}
@Override
public void setFocus() {
// TODO Auto-generated method stub
}
}
My AddressContentProvider Class looks like this -
public class AddressContentProvider implements IContentProvider {
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof List)
return ((List<?>) parentElement).toArray();
if (parentElement instanceof City)
return ((City) parentElement).getStreets();
if (parentElement instanceof Street)
return ((Street) parentElement).getHouses();
return new Object[0];
}
public Object getParent(Object element) {
if (element instanceof Street)
return ((Street) element).city;
if (element instanceof House)
return ((House) element).street;
return null;
}
public boolean hasChildren(Object element) {
if (element instanceof List)
return ((List<?>) element).size() > 0;
if (element instanceof City)
return ((City) element).getStreets().length > 0;
if (element instanceof Street)
return ((Street) element).getHouses().length > 0;
return false;
}
public Object[] getElements(Object cities) {
return getChildren(cities);
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
}
当我尝试 运行 这个时,我收到了这个错误 -
!ENTRY org.eclipse.e4.ui.workbench 4 0 2015-08-27 10:10:25.121
!MESSAGE
!STACK 0
org.eclipse.core.runtime.AssertionFailedException: assertion failed:
at org.eclipse.core.runtime.Assert.isTrue(Assert.java:110)
at org.eclipse.core.runtime.Assert.isTrue(Assert.java:96)
at org.eclipse.jface.viewers.AbstractTreeViewer.assertContentProviderType(AbstractTreeViewer.java:2385)
at org.eclipse.jface.viewers.TreeViewer.assertContentProviderType(TreeViewer.java:345)...
可能的原因是什么?
编辑:当我在视图 class 中编写 AddressContentProvider class 时,它工作得很好。但是,我在其他文件中写这个 class,它不起作用:(
Tree 的内容提供者必须实现 ITreeContentProvider
,IContentProvider
是不够的。
虽然您已经实现了树内容提供者的方法,但您实际上必须声明 class 实现了 ITreeContentProvider
.