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()。
我有一个 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()。