getActiveWorkbenchWindow在WorkbenchAdvisor.openWindows()中返回null

时间:2015-08-11 22:53:10

标签: java eclipse eclipse-plugin eclipse-rcp

我在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(也就是在getActiveWorkbenchWindow()方法中直接调用openWindows()),但无济于事。

帮助表示感谢。感谢。

1 个答案:

答案 0 :(得分:3)

您是否可以使用postStartup()代替openWindows()?在postStartup() win中不会是null

过早调用

openWindows()没有活动的工作台,使用asyncExec()获得活动窗口的原因是因为它被执行了延迟。这将是非常错误的代码,因为无法保证活动工作台已准备就绪,因此win在一次启动时可能是null而在另一次启动时不是null