5

我正在尝试在 Eclipse 插件中弹出一个对话框(即 FileDialog),实际上是在 Acceleo 转换之前我正在运行相关的 UI Launcher 项目(http://lowcoupling.com/post/51877317162/the-acceleo- ui-启动器-项目

我正在尝试在相关的 doGenerate 方法中执行此操作...

public void doGenerate(IProgressMonitor monitor) throws IOException {

    Display display = Display.getCurrent();
    System.out.println(display);
    //....

但我得到的显示是 null 我该怎么做?

4

4 回答 4

5

国家的文件IWorkbench#getDisplay()

代码应始终要求工作台进行显示,而不是依赖Display.getDefault().

所以使用:

PlatformUI.getWorkbench().getDisplay()

反而。

于 2013-10-04T21:36:44.290 回答
2

我不确定你是否看过这个,但是在 class 的文档中Display,它说Display.getCurrent()返回

null如果当前运行的线程不是任何显示的用户界面线程。

这可能是问题所在,但如果没有更多信息,我无法判断。

于 2013-10-04T21:34:11.063 回答
1

您可以尝试获取默认显示Display.getDefault()或工作台显示PlatformUI.getWorkbench().getDisplay()

如果您没有在 UI 线程中运行,请尝试以下操作:

Display.getDefault().syncExec(new Runnable() {
    public void run() {
        // ... do work that updates the screen ...
    }
});
于 2013-10-04T21:39:00.960 回答
1

我面临着同样的问题。我使用getShell().getDisplay()而不是Display.getCurrent()它对我有用。

于 2015-06-25T11:38:26.987 回答