我在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
(也就是在getActiveWorkbenchWindow()
方法中直接调用openWindows()
),但无济于事。
帮助表示感谢。感谢。
答案 0 :(得分:3)
您是否可以使用postStartup()
代替openWindows()
?在postStartup()
win
中不会是null
。
openWindows()
没有活动的工作台,使用asyncExec()
获得活动窗口的原因是因为它被执行了延迟。这将是非常错误的代码,因为无法保证活动工作台已准备就绪,因此win
在一次启动时可能是null
而在另一次启动时不是null
。