【发布时间】:2015-06-21 05:14:45
【问题描述】:
我想在我的 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。
【问题讨论】:
-
您是否尝试过将
Object逐一转换为IProjectNode,而不是从LObject转换为LIProjectNode?
标签: java eclipse treeview rcp classcastexception