在SWT接口未运行时显示MessageBox

时间:2012-09-17 08:36:24

标签: java swt

我有一个Java SWT应用程序,我正在使用这段代码来显示一个消息框。

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

        @Override
        public void run() {
            try {

                MessageBox objError = new MessageBox(SysTray.shell, SWT.ICON_ERROR);
                objError.setMessage(strMessage);
                objError.open();
                SysTray.shell.getDisplay().dispose();
                System.exit(1);

            } catch (Exception e) {
                e.printStackTrace(); // Nothing to be handled here.
            }

        }

    });

当我的SWT UI未创建时,这段代码无法执行,因此该块不会运行。这种情况发生在我的UI线程崩溃的情况下。

如何检查我的用户界面是否已经创建,如果不是,我还是要向用户显示消息框。

感谢。

1 个答案:

答案 0 :(得分:4)

MessageBox的第一个参数是周围的shell。

您必须在人机界面中定义一个显示和一个外壳,以显示消息框。

Display display = new Display();
Shell shell = new Shell(display);
// Define message box
shell.open();
while (!shell.isDisposed()) {
    if (display.readAndDispatch()) {
        display.sleep();
    }
}
display.dispose();

编辑添加并回答评论:

确定是否存在显示和外壳 -

    Display display = Display.getCurrent();
    if (display != null) {
        Shell[] shells = display.getShells();
    }