Java 当SWT接口为';t运行
我有一个JavaSWT应用程序,我正在使用这段代码来显示一个消息框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);
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:查看我修改过的答案。