当用户在Project Explorer中双击某些文件类型(例如:.pc,.mn等)时,我想打开一个对话框。
我不知道这是否是正确的做法。我为这些文件类型创建了一个虚拟编辑器(通过扩展org.eclipse.ui.editors.text.TextEditor),在init方法中,我创建了对话框并打开它。
但是在用户关闭对话框后(按“确定”或“取消”按钮)。编辑器打开时出现错误,如下所示。
我在init方法中的代码
@Override
public void init(IEditorSite site, IEditorInput input) throws PartInitException {
FileEditorInput fileEdi = null;
if (input instanceof FileEditorInput) {
fileEdi = (FileEditorInput)input;
}
ABCTitleAreaDialog dia = new ABCTitleAreaDialog(site.getShell(), fileEdi.getFile().getLocation().toString(),
null);
dia.setHelpAvailable(false);
if (Window.OK == dia.open()) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
//Code to open Perspective
}
});
}
IWorkbenchPart part = site.getPart();
if (PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().closeEditor((IEditorPart)part, false)) {
System.out.println("closed the editor");
}
throw new PartInitException("Error opening editor"));//$NON-NLS-1$
}
是否可以取消/中止编辑器创建过程,以便我可以避免打开错误编辑器部分。
对我来说,任何替代解决方案都可以。
答案 0 :(得分:0)
而不是抛出PartInitException
,您可以使用asyncExec
来关闭编辑器:
@Override
public void init(final IEditorSite site, final IEditorInput input)
{
setSite(site);
setInput(input);
Display.getCurrent().asyncExec(new Runnable()
{
@Override
public void run()
{
site.getPage().closeEditor(Editor.this, false);
}
});
}
编辑:更改为显示完整的初始化方法
答案 1 :(得分:0)
你可能在init(...)的开头缺少以下调用 - 方法:
super.setInput(input);
super.setSite(site);
增强:
您应该考虑通过扩展点 org.eclipse.ui.navigator.navigatorContent 和 org.eclipse.ui.navigator.viewer 使用可重定向的操作来提供新的ResourceContent到 org.eclipse.ui.navigator.ProjectExplorer 。 因此,您可以调用一个Action,根据对话框的退出状态
打开对话框和编辑器进一步阅读