如何从 Eclipse 插件检查 workbench 是否处于活动状态

How to check if workbench is active from eclipse plugin

我完全不熟悉 Eclipse 插件开发和通过以下简单示例开发 Eclipse 插件。我有一个需求,根据用户是否在当前Eclipse中来执行一些业务逻辑workbench.

我正在尝试以下代码

    PlatformUI.getWorkbench().addWindowListener(new IWindowListener() {
        .........

        @Override
        public void windowDeactivated(IWorkbenchWindow arg0) {
            // TODO Auto-generated method stub
            .......
        }
     });

但是即使 wizard/dialog 打开,方法 windowDeactivated 也会被调用。我尝试了很多方法,但无法得到正确的解决方案。

请提供解决方案,因为我完全卡住了,整个项目都基于解决这个问题。

我真的怀疑你的业务逻辑应该取决于 workbench 是否处于活动状态。

如果您是 Eclipse 插件开发的新手,请花一些时间熟悉这些概念。

如果您仍然认为需要知道 workbench 是否处于活动状态,您可以检查它的任何 shell 是否处于活动状态。

boolean isActive() {
  Display display = PlatformUI.getWorkbench().getDisplay();
  return display.getActiveShell() != null;
}

getActiveShell() returns 当前活动的 Shell,或 null 如果没有 shell 显示活动。

虽然由于维护和性能问题不建议使用以下解决方案,但我使用以下解决方案解决了问题。

如果有更好的解决方案,请告诉我。

PlatformUI.getWorkbench().getActiveWorkbenchWindow().
 getShell().getDisplay().addFilter 
     (SWT.FocusOut,new WindowDisplayListener());

public class WindowDisplayListener implements Listener{

@Override
public void handleEvent(Event event) {

 //using a similar logic as provided by @Rüdiger Herrmann in the above post.
 Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().
                       getShell().getDisplay().getActiveShell();

  if(shell == null) //code for window inactive.
  }
  }

这个解决方案有一个小问题。每当用户从 eclipse 中的任何向导打开文件浏览器对话框时,shell 就会变为 null。例如:如果用户打开文件浏览器以导入现有项目,则 shell 变为空。

如果有任何其他解决方案,请告诉我。