如何从 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 变为空。
如果有任何其他解决方案,请告诉我。
我完全不熟悉 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 变为空。
如果有任何其他解决方案,请告诉我。