RCP - 应用程序没有活动 window

RCP - Application does not have an active window

在自定义服务中获取非陈旧 EPartService/EModelService/MApplication 引用的最佳方法是什么?我知道它可以通过 @Execute 方法在 Handler 内部完成,但我没有在自定义服务 class 中看到这样做的方法。任何帮助将不胜感激。

@Singleton
@Creatable
public class MyService {

    @Inject
    private EPartService partService;
    @Inject
    private EModelService modelService;
    @Inject
    private MApplication application;

    @Inject
    public MyService(final IEclipseContext context) {
        context.set(MyService.class.getName(), this);
    }

    public void doWork(){
     // Application does not have an active window
    }
}

使用活动叶上下文:

IEclipseContext activeContext = application.getContext().getActiveLeaf();

EPartService partService = activeContext.get(EPartService.class);

我认为模型和零件服务实际上没有变化,所以只使用 application.getContext() 应该也可以。

应用对象不变。

发生此问题的原因是为每个 window 创建了 EPartService,并且当您将服务注释为 @Singleton EPartService 时仅注入到您的服务一次,而当您更改时 window EPartService 未更新。所以去掉注解@Singleton就一切OK了