WorkbenchAdvisor.openWindows() 中的 getActiveWorkbenchWindow returns 为空
getActiveWorkbenchWindow returns null in WorkbenchAdvisor.openWindows()
我的 WorkbenchAdvisor
子类的 openWindows()
覆盖中有以下代码:
public class MyWorkbenchAdvisor extends WorkbenchAdvisor {
...
@Override
public boolean openWindows() {
super.openWindows();
PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
@Override
public void run() {
IWorkbenchWindow win =
PlatformUI.getWorkbench().getActiveWorkbenchWindow();
}
});
}
}
当我调试代码时,我看到在调用 getActiveWorkbenchWindow()
之后,win
是 null
。我确实注意到,通过使用 asyncExec
而不是 syncExec
,我可以使 win
正确初始化。但是,我确实相信在我的特定情况下我需要 syncExec
。
作为旁注,我也尝试过完全不使用 asyncExec
/syncExec
(a.k.a 直接在 openWindows()
方法),但无济于事。
感谢帮助。谢谢。
是否可以使用 postStartup()
而不是 openWindows()
? postStartup()
win
不会是 null
.
openWindows()
被调用得太早没有活动的 workbench ,你使用 asyncExec()
获得活动 window 的原因是因为它被延迟执行。这将是非常有问题的代码,因为不能保证活动 workbench 已准备就绪,因此 win
在一次启动时可能是 null
而在另一次启动时不是 null
。
我的 WorkbenchAdvisor
子类的 openWindows()
覆盖中有以下代码:
public class MyWorkbenchAdvisor extends WorkbenchAdvisor {
...
@Override
public boolean openWindows() {
super.openWindows();
PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
@Override
public void run() {
IWorkbenchWindow win =
PlatformUI.getWorkbench().getActiveWorkbenchWindow();
}
});
}
}
当我调试代码时,我看到在调用 getActiveWorkbenchWindow()
之后,win
是 null
。我确实注意到,通过使用 asyncExec
而不是 syncExec
,我可以使 win
正确初始化。但是,我确实相信在我的特定情况下我需要 syncExec
。
作为旁注,我也尝试过完全不使用 asyncExec
/syncExec
(a.k.a 直接在 openWindows()
方法),但无济于事。
感谢帮助。谢谢。
是否可以使用 postStartup()
而不是 openWindows()
? postStartup()
win
不会是 null
.
openWindows()
被调用得太早没有活动的 workbench ,你使用 asyncExec()
获得活动 window 的原因是因为它被延迟执行。这将是非常有问题的代码,因为不能保证活动 workbench 已准备就绪,因此 win
在一次启动时可能是 null
而在另一次启动时不是 null
。