我有一个 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();
}
}
我会尝试:
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() 之间的区别。
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa