Eclipse PDE:以编程方式检测打开的对话框并关闭它

时间:2015-05-19 19:01:56

标签: eclipse swt eclipse-rcp jface eclipse-pde

在Eclipse Luna上,我选择一个服务器并单击Servers视图上的Start按钮,然后服务器(例如Tomcat8)将启动。如果在启动过程中出现问题,将填充一个对话框以显示错误消息(例如超时)。在此测试用例中,该对话框是无模式的。

现在我需要从插件以编程方式启动服务器。如果发生错误,我怎么能以编程方式检测到对话框已被打开以及如何关闭它?

1 个答案:

答案 0 :(得分:3)

您可以使用Display.addFilter方法收听所有SWT.Activate个事件,这些事件会告诉您所有正在激活的Shell(和其他内容)。然后,您可以检测要关闭的shell。

类似的东西:

Display.getDefault().addFilter(SWT.Activate, new Listener()
  {
    @Override
    public void handleEvent(final Event event)
    {
      // Is this a Shell being activated?

      if (event.widget instanceof Shell)
       {
         final Shell shell = (Shell)event.widget;

         // Look at the shell title to see if it is the one we want

         if ("About".equals(shell.getText()))
          {
            // Close the shell after it has finished initializing

            Display.getDefault().asyncExec(new Runnable()
             {
               @Override
               public void run()
               {
                 shell.close();
               }
             });
          }
       }
    }
  });

关闭一个名为'关于'。

的对话框