关闭向导并运行对话框

时间:2017-10-05 09:27:30

标签: java swt jface

我有一个Wizard有一个page。在向导类的performFinish方法中,我想关闭向导并运行另一个插件的对话框。

当我写下面的代码时,它没有关闭,只是不可见。

getShell().setVisible(false);

当我getShell().close()dialog.close()wizard.dispose()时,对话框未显示。我该怎么办?

对话框在另一个插件中打开,代码如下。

IWorkbench wb = PlatformUI.getWorkbench();
IWorkbenchWindow win =wb.getActiveWorkbenchWindow();
CreateDialog UD = new CreateDialog(win.getShell());
UD.open();

1 个答案:

答案 0 :(得分:0)

如果希望在新对话框打开之前关闭向导,则必须安排对话框异步运行。您可以使用Display.asyncExec执行此操作。类似的东西:

@Override
public boolean performFinish()
{
  ... other work ...

  Display.getCurrent().asyncExec(() ->
    {
      IWorkbench wb = PlatformUI.getWorkbench();
      IWorkbenchWindow win =wb.getActiveWorkbenchWindow();
      CreateDialog UD = new CreateDialog(win.getShell());
      UD.open();
    });

  return true;
}

(这是Java 8,如果您使用的是早期的Java,请使用Runnable)。

在向导关闭之后,asyncExec块中的代码才会运行。