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() 之后,winnull。我确实注意到,通过使用 asyncExec 而不是 syncExec,我可以使 win 正确初始化。但是,我确实相信在我的特定情况下我需要 syncExec

作为旁注,我也尝试过完全不使用 asyncExec/syncExec(a.k.a 直接在 openWindows() 方法),但无济于事。

感谢帮助。谢谢。

是否可以使用 postStartup() 而不是 openWindows()postStartup() win 不会是 null.

openWindows() 被调用得太早没有活动的 workbench ,你使用 asyncExec() 获得活动 window 的原因是因为它被延迟执行。这将是非常有问题的代码,因为不能保证活动 workbench 已准备就绪,因此 win 在一次启动时可能是 null 而在另一次启动时不是 null