【问题标题】:Close Eclipse ViewPart tab when createPartControl function fails when launched from "Quick Access"?从“快速访问”启动时 createPartControl 功能失败时关闭 Eclipse ViewPart 选项卡?
【发布时间】:2015-07-29 02:00:34
【问题描述】:

创建新的 Eclipse ViewPart 时的默认行为是显示新选项卡,而不管 createPartControl 函数中发生什么。例如,如果没有创建任何东西,没有小部件,什么都没有,将显示一个空白选项卡。我不喜欢这种行为。如果 createPartControl 中的初始化失败,我想关闭该选项卡。

现在,我有一个可以执行此操作的鼠标按钮上下文菜单处理程序,例如

public class MyPartMB3Handler extends AbstractHandler {

    @Override
    public Object execute(final ExecutionEvent event)
    throws ExecutionException {
        // Create a view and show it.
        IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
        IWorkbenchPage page = window.getActivePage();
        try {
            MyPart viewPart = (MyPart)page.showView(MyPart.ID);
            if(!viewPart.isCreated()) {
                page.hideView(viewPart);
            }
        }
        catch(PartInitException e) {
            e.printStackTrace();
        }

        return null;
    }
}

isCreated 函数是一个小技巧,可以让我知道我的 ViewPart 初始化是否失败,例如

public class MyPart extends ViewPart {

    public static final String ID = "com.myplugin.MyPart";
    private Composite _parent = null;

    @Override
    public void createPartControl(Composite parent) {
        if(!MyPlugin.createPartControl(parent) { // Some common part creation code I use.
            //PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().hideView(this);
            return;
        }
        _parent = parent;
    }

    @Override
    public void setFocus() {
    }

    public boolean isCreated() {
        return _parent != null;
    }
}

当我从 Eclipse“快速访问”字段启动此 ViewPart 时出现问题。我现在不拥有处理程序。从我强制的异常中,处理程序可能是 org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPartControl 或 org.eclipse.ui.internal.e4.compatibility.CompatibilityView.createPartControl 或 org.eclipse.ui.internal。 e4.compatibility.CompatibilityPart.create.

我尝试将视图隐藏在 createPartControl 函数中(请参见上面的注释行),但 Eclipse 不喜欢这样并喷出一堆异常。

我想也许我可以在 createPartControl 中抛出 PartInitException,但 Eclipse 告诉我不允许这样做。

那么,从“快速访问”启动时,我如何获得菜单处理程序行为?

一个潜在的问题可能是,是否有更好/正确的方法来实现这种行为?

【问题讨论】:

  • 如果由于某种原因无法初始化视图,则视图部分通常会在视图区域中显示一条包含错误消息的消息。

标签: eclipse eclipse-rcp


【解决方案1】:

您可以通过在 createPartControl 完成后异步运行 hideView 来关闭视图 - 如下所示:

@Override
public void createPartControl(Composite parent) {

  parent.getDisplay().asyncExec(new Runnable() {
    @Override
    public void run()
    {
      getSite().getPage().hideView(MyPart.this);
    }
  });

【讨论】:

  • 哇。有时你就是只见树木不见森林。这是一个伟大而简单的答案。我觉得有点尴尬,因为我自己没有想到它。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 2011-02-11
  • 2012-03-17
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
  • 1970-01-01
相关资源
最近更新 更多