Java Eclipse:获取空显示

Java Eclipse:获取空显示,java,eclipse,swt,emf,acceleo,Java,Eclipse,Swt,Emf,Acceleo,我正试图在Eclipse插件中弹出一个对话框(即FileDialog),实际上是在Acceleo转换之前,我正在运行相关的UI Launcher项目() 我正试图用相关的数据生成方法来实现这一点 public void doGenerate(IProgressMonitor monitor) throws IOException { Display display = Display.getCurrent(); System.out.println(display);

我正试图在Eclipse插件中弹出一个对话框(即FileDialog),实际上是在Acceleo转换之前,我正在运行相关的UI Launcher项目()

我正试图用相关的数据生成方法来实现这一点

public void doGenerate(IProgressMonitor monitor) throws IOException {

    Display display = Display.getCurrent();
    System.out.println(display);
    //....
但是我得到的显示是空的
我该怎么做

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

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

这可能是个问题,但如果没有更多信息,我就说不出来。

国家文件:

代码应该总是向工作台请求显示,而不是依赖display.getDefault()

因此,请使用:

PlatformUI.getWorkbench().getDisplay()

相反。

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

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

Display.getDefault().syncExec(new Runnable() {
    public void run() {
        // ... do work that updates the screen ...
    }
});

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

您知道,您建议的第二种方法表明不建议使用第一种方法?;)是的,这就是问题所在,但我仍然看不到在哪里显示对话框注意,这不能用于不能使用
PlatformUI
的“纯”e4应用程序。对于
syncExec
asynceec
使用
org.eclipse.e4.ui.di.UISynchronize
,它可以被注入。@greg-449很高兴知道。我还没有用过e4。