3

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 スレッドがクラッシュした状況で発生しました。

UI が既に作成されているかどうかを確認するにはどうすればよいですか。作成されていない場合でも、ユーザーにメッセージ ボックスを表示したいと思います。

ありがとう。

4

1 に答える 1

4

MessageBoxの最初のパラメーターは、周囲のシェルです。

メッセージボックスを表示するには、ディスプレイとディスプレイ内のシェルを定義する必要があります。

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();
    }
于 2012-09-17T14:02:33.540 に答える