如何从eclipse插件检查工作台是否处于活动状态

时间:2015-11-16 16:24:12

标签: eclipse-plugin

我是Eclipse Plug-in Development的新手,并通过以下简单示例开发Eclipse插件。我需要根据用户是否不在当前的Eclipse工作台中来执行一些业务逻辑。

我正在尝试以下代码

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

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

但即使打开任何向导/对话框,也会调用方法windowDeactivated。我尝试了很多方法,但无法得到正确的解决方案。

请提供解决方案,因为我完全陷入困境,整个项目都是基于获得此问题的解决方案。

2 个答案:

答案 0 :(得分:0)

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

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

如果您仍然认为您需要知道工作台是否处于活动状态,您可以检查其任何外壳是否处于活动状态。

boolean isActive() {
  Display display = PlatformUI.getWorkbench().getDisplay();
  return display.getActiveShell() != null;
}
如果显示的外壳未处于活动状态,

getActiveShell()会返回当前有效的Shellnull

答案 1 :(得分:0)

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

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

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将变为空。

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