无法创建部件的控件树查看器。类转换异常
Failed to create the part's control treeviewer. ClassCastException
我想在我的 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()
- returns 当前项目数组。
每个项目都实现接口 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;
}
}
但是我有以下错误:"Failed to create the part's controls"。
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)
项目中的每个 child 还实现了 IProjectNode
。
如何解决这个异常?我做错了什么?
关于 children 方法的信息:
public boolean hasChildren(Object element) {'
if (((IProjectNode)element).getChildren() == null)
return false;
return true;
}
在项目 class 中为 'getChildren()' 实施:
public IProjectNode[] getChildren() {
IProjectNode[] projectNodes = {
settingsFile,
ldlFile,
pythonFolder,
outFolder
};
return projectNodes;
}
settingsFile, ldlFile, pythonFolder, outFolder
还实现了 IProjectNode
.
在
ProjectManager.getInstance().getProjects().toArray();
toArray()
方法 return 是一个 Object
的数组,您不能将其转换为 IProjectNode
的数组(即使实际内容是那些数组节点)。
改为使用:
ProjectManager.getInstance().getProjects().toArray(new IProjectNode[0]);
这种形式的 toArray
做 return 一个 IProjectNode
的数组
另外你的hasChildren
方法是returning 'true'当项目节点'getChildren'returns null和'false'时有实际上 children。你需要这样的东西:
@Override
public boolean hasChildren(Object element) {
return ((IProjectNode)element).getChildren() != null;
}
我想在我的 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()
- returns 当前项目数组。
每个项目都实现接口 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;
}
}
但是我有以下错误:"Failed to create the part's controls"。
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)
项目中的每个 child 还实现了 IProjectNode
。
如何解决这个异常?我做错了什么?
关于 children 方法的信息:
public boolean hasChildren(Object element) {'
if (((IProjectNode)element).getChildren() == null)
return false;
return true;
}
在项目 class 中为 'getChildren()' 实施:
public IProjectNode[] getChildren() {
IProjectNode[] projectNodes = {
settingsFile,
ldlFile,
pythonFolder,
outFolder
};
return projectNodes;
}
settingsFile, ldlFile, pythonFolder, outFolder
还实现了 IProjectNode
.
在
ProjectManager.getInstance().getProjects().toArray();
toArray()
方法 return 是一个 Object
的数组,您不能将其转换为 IProjectNode
的数组(即使实际内容是那些数组节点)。
改为使用:
ProjectManager.getInstance().getProjects().toArray(new IProjectNode[0]);
这种形式的 toArray
做 return 一个 IProjectNode
另外你的hasChildren
方法是returning 'true'当项目节点'getChildren'returns null和'false'时有实际上 children。你需要这样的东西:
@Override
public boolean hasChildren(Object element) {
return ((IProjectNode)element).getChildren() != null;
}