java无法创建部件的控制树查看器。类卡斯特例外
我想在我的RCP应用程序中创建一个项目树资源管理器。
这是我的树视图部件:
public class ProjectExplorer extends ViewPart{
public static final String ID = "rcp.projectexplorer";
public ProjectExplorer() {
}
private TreeViewer viewer;
public void createPartControl(Composite parent) {
viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
viewer.setContentProvider(new ViewContentProvider());
viewer.setLabelProvider(new ViewLabelProvider());
viewer.setInput(ProjectManager.getInstance().getProjects().toArray());
}
@Override
public void setFocus() {
viewer.getControl().setFocus();
}
}
ProjectManager.getInstance().getProjects().toArray()
-返回包含当前项目的数组。
每个项目都实现接口IProjectNode
。
在ContentProvider方法Object[] getElements(Object inputElement)
中,我尝试将项目(inputElement
)从Object[]
转换为IProjectNode[]
public class ViewContentProvider implements ITreeContentProvider {
@Override
public void dispose() {
// TODO Auto-generated method stub
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// TODO Auto-generated method stub
}
@Override
public Object[] getElements(Object inputElement) {
return (IProjectNode[])inputElement;
}
@Override
public Object[] getChildren(Object parentElement) {
return ((IProjectNode)parentElement).getChildren();
}
@Override
public Object getParent(Object element) {
// TODO Auto-generated method stub
return ((IProjectNode)element).getParent();
}
@Override
public boolean hasChildren(Object element) {
if (((IProjectNode)element).getChildren() == null)
return true;
return false;
}
}
但我有以下错误:“未能创建零件的控件”。
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lrcp.projects.source.IProjectNode;
at rcp.projects.ViewContentProvider.getElements(ViewContentProvider.java:24)
at org.eclipse.jface.viewers.StructuredViewer.getRawChildren(StructuredViewer.java:999)
at org.eclipse.jface.viewers.ColumnViewer.getRawChildren(ColumnViewer.java:699)
项目中的每个子级也实现IProjectNode
如何修复此异常?我做错了什么?
有关子方法的信息:
public boolean hasChildren(Object element) {'
if (((IProjectNode)element).getChildren() == null)
return false;
return true;
}
在项目类中为“getChildren()”实现:
public IProjectNode[] getChildren() {
IProjectNode[] projectNodes = {
settingsFile,
ldlFile,
pythonFolder,
outFolder
};
return projectNodes;
}
settingsFile, ldlFile, pythonFolder, outFolder
还实现了IProjectNode
# 1 楼答案
在
toArray()
方法返回一个Object
数组,您不能将其强制转换为IProjectNode
数组(即使实际内容是这些节点的数组)而是使用:
这种形式的
toArray
返回一个IProjectNode
数组另外,当项目节点“getChildren”返回null时,您的
hasChildren
方法返回“true”,而当实际存在子节点时,返回“false”。你需要像这样的东西: