【问题标题】:Eclipse RCP which shell to use for popupsEclipse RCP 哪个 shell 用于弹出窗口
【发布时间】:2014-02-28 01:05:44
【问题描述】:

我正在尝试在 Eclipse RCP 中获取一个 shell,并在我的应用程序中弹出弹出窗口,并且已经阅读了多个资源/教程来完成任务,但运气不佳。

试过了:

Display.getCurrent().getActiveShell();

Display.getDefault().getActiveShell();

  PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();

有时甚至

 Display.getDefault().getShells()[0];

但不同的事情似乎在不同的情况下起作用。

在线资源有不同的观点,我发现大多数事情都说你根本不应该真正使用Display 类,但我试图从 Eclipse 作业中弹出一个弹出窗口。它已经结束并且失败了,需要使用以下方式显示弹出窗口:

代码:

        Display.getCurrent().syncExec(new Runnable() {

            @Override
            public void run() {

                    MessageDialog.openError(Display.getDefault().getActiveShell(), "Publish", e.getMessage());


            }
        });
    }

弹出窗口位于从 Eclipse 作业启动的线程执行的 Runnable 内。在服务器上调用同步方法时提供进度条更新很复杂,但很有必要。

它不起作用,我不知道为什么。只是从 getActiveShell() 调用中得到一个空值。

真正的问题不是“为什么我的代码不起作用”,而是在 Eclipse RCP 框架中为弹出窗口获取 shell 的绝对正确方法,尤其是在您无法访问工作台的情况下?

【问题讨论】:

    标签: java popup eclipse-rcp


    【解决方案1】:

    虽然那里的 Eclipse 源代码似乎没有确定的方法。最接近的是

    的一些变体
    PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
    

    即使返回 nullMessageDialog 仍然可以接受。

    DebugUIPlugin 有这个更详细的版本:

    public static Shell getShell() {
      IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
      if (window == null) {
        IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows();
        if (windows.length > 0) {
           return windows[0].getShell();
        }
      }
      else {
        return window.getShell();
      }
      return null;
    }
    

    在 Eclipse 源代码中很少使用来自 JobMessageDialog。由于 Job 是异步运行的,因此 Job 的弹出窗口可能会出乎意料。

    在 Eclipse 4 应用程序中,如果您可以获得 IEclipseContext,则上下文中应该有一个 IShellProvider。 e4 应用也可以使用StatusReporter,不需要外壳。

    【讨论】:

    • 如何从 Eclipse 上下文中获取IShellProvider
    • @Campa 您可以注入它或使用 IEclipseContext.get(这仅适用于 e4 应用程序)。
    猜你喜欢
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    相关资源
    最近更新 更多