双击eclipse工作区资源上的监听器

时间:2013-12-12 11:01:44

标签: eclipse eclipse-plugin swt eclipse-rcp jface

当用户在Project Explorer中双击某些文件类型(例如:.pc,.mn等)时,我想打开一个对话框。

我不知道这是否是正确的做法。我为这些文件类型创建了一个虚拟编辑器(通过扩展org.eclipse.ui.editors.text.TextEditor),在init方法中,我创建了对话框并打开它。

但是在用户关闭对话框后(按“确定”或“取消”按钮)。编辑器打开时出现错误,如下所示。 enter image description here

我在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$
}

是否可以取消/中止编辑器创建过程,以便我可以避免打开错误编辑器部分。

对我来说,任何替代解决方案都可以。

2 个答案:

答案 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,根据对话框的退出状态

打开对话框和编辑器

进一步阅读