开发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);就应该报错才对。
大家知道这个问题产生的原因吗?