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

问题描述 投票:0回答:2

我有一个 JFace 应用程序,想要在启动时做一些工作。所以我重写了窗口的打开方法。
但现在我遇到的问题是,在失败的情况下我无法显示错误消息,因为此时 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();
  }
}
java jface
2个回答
1
投票

我会尝试:

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

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

EDIT:

静态方法

Display.getDefault()
返回默认显示线程,或者创建一个新线程(如果尚不存在)。

另一方面,静态方法

Display.getCurrent()
从当前运行的线程返回
Display
实例,或者如果当前运行的线程不是任何显示的用户界面线程,则返回
null

请参阅有关 Display 类的 Java 文档的更多信息。

您可能还想看看 syncExec() 和 asyncExec() 之间的区别


0
投票
         aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa                                                                                       
© www.soinside.com 2019 - 2024. All rights reserved.