0

SWTを使用してEclipseプラグイン内にダイアログを作成しようとしています。ShellオブジェクトとDisplayオブジェクトを作成でき、コードは問題なくコンパイルされますが、プラグインをデバッグしているときは、スタンドアロンアプリケーションで使用すると同じコードが完全に実行されますが、どのような種類のダイアログも表示されません。

これは、IWorkbenchWindowActionDelegateを実装するSampleActionのrunメソッド内に記述したサンプルコードです。

Display display = new Display();
Shell shell = new Shell(display);
shell.open();


while(!shell.isDisposed())
{
    if(!display.readAndDispatch())
    {
        display.sleep();
    }
}

display.dispose();

また、readAndDispatchを削除してこのコードを記述しましたが、それでも機能しません..何も表示されません

    Display display = new Display();
    Shell shell = new Shell(display);
    shell.open();
    MessageDialog dialog = new MessageDialog(shell, "My Title", null,
            "My message", MessageDialog.ERROR, new String[] { "First",
          "Second", "Third" }, 0);
    int result = dialog.open();
4

2 に答える 2

3

これは仕事をします。事前に新しいシェルを開く必要はありません。新しいシェルを に渡すだけMessageDialogです。

MessageDialog dialog = new MessageDialog(new Shell(), "My Title", null,
        "My message", MessageDialog.ERROR, new String[] { "First",
      "Second", "Third" }, 0);
int result = dialog.open();

parentShell現在使用している GUI パーツの を使用して、ダイアログに渡すこともできます。

于 2012-08-30T14:43:37.570 に答える
1

新しいシェルをモーダル ダイアログの親として使用すると、ダイアログがメインのワークベンチ ウィンドウの後ろに隠れてしまい、ユーザーがダイアログを表示したり、メインのワークベンチ ウィンドウで何も実行したりできなくなる可能性があるため、ユーザーに不都合が生じる可能性があることに注意してください。解決策は、ダイアログの親としてウィンドウ シェルを渡すことです。アクションは IWorkbenchWindowActionDelegate であるため、init メソッドに渡されたウィンドウを記録してから、window.getShell() を使用して親シェルを取得する必要があります。

プラグインを作成するときは、ディスプレイを作成したり、イベント キュー (readAndDispatch) を実行したりしないでください (別のトピックであるモードレス ダイアログが必要な場合を除きます)。

于 2012-08-31T15:54:45.260 に答える