创建后激活导致工具栏在零件堆栈中丢失

ACTIVATE after CREATE causing the toolbar to be missing in part stack

我有一个包含两个零件的零件堆。第二部分有一个 ToolBar 和一个带有图标的 Direct Tool Item

我想初始化第二部分而不显示它,因为有些代码需要立即执行,而不是在获得焦点时执行。

为此我调用:

partService.showPart(secondPartID, PartState.CREATE);

之后我打电话给:

partService.showPart(secondPartID, PartState.ACTIVATE);

这会按预期将第二个视图置于最前面,但缺少工具栏。

我尝试获取部件的工具栏并获取小部件,但小部件为空。

如果我切换到第一部分(通过单击选项卡)然后切换回第二部分,则工具栏已成功创建。

我想知道我是否使用了 CREATE/ACTIVATE 调用不正确,因为我得到的行为很奇怪。

这可能是什么原因造成的?

通过将其包装在 async 中,它可以修复它。我已经尝试了多种变体来解决这个问题,这是唯一可以解决的问题。

Display.getDefault().asyncExec(() -> partService.showPart(id, PartState.ACTIVATE));

肯定是initialised/ready事情还没有完成,导致工具栏无法添加。通过使用异步,它必须等待直到它准备好显示工具栏。

如果有人能够提供任何额外信息来说明为什么会修复它,我会更新答案。