当前位置: 代码迷 >> Eclipse >> 开发Eclipse插件遇到的奇怪有关问题
  详细解决方案

开发Eclipse插件遇到的奇怪有关问题

热度:51   发布时间:2016-04-23 12:27:03.0
开发Eclipse插件遇到的奇怪问题
今天编写eclipse插件,想用代码打开eclipse自带的编辑器。于是写了如下的代码: 
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject("Test");
IFile java_file = project.getFile(new Path("/java_file.txt"));
InputStream inputStreamJava = new ByteArrayInputStream("class MyType{}".getBytes());
if (!java_file.exists())
java_file.create(inputStreamJava, false, null);
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchPage page = workbench.getActiveWorkbenchWindow().getActivePage();
IEditorDescriptor desc = workbench.getEditorRegistry().getDefaultEditor(java_file.getName());
IFileEditorInput fileEditorInput = new FileEditorInput(java_file);
page.openEditor(fileEditorInput, desc.getId());
但是程序运行后报了如下的错误: 
java.lang.ClassCastException: org.eclipse.ui.part.FileEditorInput cannot be cast to org.eclipse.ui.IFileEditorInput 
at org.eclipse.ui.internal.ide.model.FileInputAdapterFactory.getAdapter(FileInputAdapterFactory.java:36) 
at org.eclipse.core.internal.adapter.AdapterFactoryProxy.getAdapter(AdapterFactoryProxy.java:80) 
at org.eclipse.core.internal.runtime.AdapterManager.getAdapter(AdapterManager.java:293) 
at org.eclipse.core.runtime.PlatformObject.getAdapter(PlatformObject.java:66) 
at org.eclipse.ui.part.FileEditorInput.getAdapter(FileEditorInput.java:263) 
at org.eclipse.ui.texteditor.DocumentProviderRegistry.getDocumentProvider(DocumentProviderRegistry.java:311) 
at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.setDocumentProvider(AbstractDecoratedTextEditor.java:1374) 
at org.eclipse.ui.texteditor.AbstractTextEditor.updateDocumentProvider(AbstractTextEditor.java:4071) 
at org.eclipse.ui.texteditor.AbstractTextEditor.doSetInput(AbstractTextEditor.java:4126) 
at org.eclipse.ui.texteditor.StatusTextEditor.doSetInput(StatusTextEditor.java:203) 
at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.doSetInput(AbstractDecoratedTextEditor.java:1413) 
at org.eclipse.ui.editors.text.TextEditor.doSetInput(TextEditor.java:166) 
这个异常让人很无语,org.eclipse.ui.part.FileEditorInput无法转换为org.eclipse.ui.IFileEditorInput 
但org.eclipse.ui.part.FileEditorInput本来就实现了org.eclipse.ui.IFileEditorInput。 
如果这个转换不成功,IFileEditorInput fileEditorInput = new FileEditorInput(java_file);就应该报错才对。 
大家知道这个问题产生的原因吗?

------解决方案--------------------
错在这一行
page.openEditor(fileEditorInput, desc.getId());
看看 IWorkbenchPage.openEditor API文档吧,第一个参数类型传错了
------解决方案--------------------
我运行了下你的代码,没有出现ClassCast错误。你可以在

org.eclipse.ui.internal.ide.model.FileInputAdapterFactory.getAdapter(FileInputAdapterFactory.java:36)

地方设置断点,跟进去看看为什么getAdapter出错,我觉得可能跟插件环境有关。。。




------解决方案--------------------
跟踪学习,希望能更快更好的把问题解决了 ;
  相关解决方案