Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当SWT接口为';t运行_Java_Swt - Fatal编程技术网

Java 当SWT接口为';t运行

Java 当SWT接口为';t运行,java,swt,Java,Swt,我有一个JavaSWT应用程序,我正在使用这段代码来显示一个消息框 Display.getDefault().asyncExec(new Runnable() { @Override public void run() { try { MessageBox objError = new MessageBox(SysTray.shell, SWT.ICON_ERROR);

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

    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线程崩溃的情况下

如何检查UI是否已创建,如果未创建,我仍希望向用户显示消息框


谢谢。

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();
    }

嗨,吉尔伯特,这是我用来启动UI的。我提供的代码片段只有在主UI运行时才会执行。如果SWT线程存在,则
Display.getDefault()
方法在SWT线程的上下文中执行代码,如果不存在,则永远不会执行块中的代码。有没有办法检查我的应用程序是否已经在运行
Shell
Display
?如果它们存在,我无法创建
Runnable
并执行显示消息框的代码。如果没有,我将创建一个
Shell
Display
,然后创建一个消息框。@Mridang Agarwalla:查看我修改过的答案。