JFace 的 MessageDialog 在 open() 方法中失败

JFace's MessageDialog fails in open() method

我有一个 JFace 应用程序,想在启动时做一些工作。所以我覆盖了 window.
的 open 方法 但是现在我有一个问题,在失败的情况下我无法显示错误消息,因为此时 shell 为空。我不知道如何解决这个问题。

public class MyExample extends ApplicationWindow {
  public MyExample() {
    super(null);
  }

  public void run() {
    setBlockOnOpen(true);
    open();
    Display.getCurrent().dispose();
  }

  @Override
  public int open() {
    // do some work
    if (...) {
      MessageDialog.openError(getShell(), "Error", "Error occured");
    }
    return super.open();
  }
}

我会尝试:

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

    @Override
    public void run() {
         MessageDialog.openError(Display.getCurrent().getActiveShell(), "Error", "Message");
    }
});

EDIT:

静态方法 Display.getDefault() returns 默认显示线程 或者如果尚不存在则创建一个新方法。

另一方面,静态方法 Display.getCurrent() returns 来自当前 运行 线程的 Display 实例,或者 null 如果当前 运行线程不是任何显示的用户界面线程。

Display class 的 Java 文档中查看更多信息。

您可能还想看看 the difference between syncExec() and asyncExec()