Eclipse RCP(e4)的新增功能,试图获取一个处理程序来更新Part中的UI小部件。

我尝试注入EPartService首先通过ID访问部件,如下所示:

public class Example {

    public static final String PART_ID = “au.org.example.app.part”;

    @Inject
    private EPartService partService;

    public void eventOccured()
    {
        MPart part = partService.findPart(PART_ID); // exception thrown here
    }

}


但这引发了NPE。

如果ID不正确,findPart()应该至少安全地返回null吗?那我想念什么呢?

我也乐于听取有关教程的建议(已经完成了一些Lars Vogella's很棒的教程,但是对于这个问题没有用)。

需要任何其他信息,请让我知道。

编辑:看起来EPartService没有被注入?我没有正确添加吗?

最佳答案

注入仅在应用程序模型已知的对象(例如零件和处理程序)上自动完成。

对于创建的对象,可以使用ContextInjectionFactory进行注入。您可以使用以下方法创建对象:

@Inject
IEclipseContext context;

...

MyClass myClass = ContextInjectionFactory.make(MyClass.class, context);


或者您可以使用以下方法在现有的类实例上进行注入:

ContextInjectionFactory.inject(myClass, context);


在这种情况下,不会在类构造函数上进行注入。

makeinject的其他变体具有第二个上下文,该上下文允许将其他值添加到要注入的上下文中。

关于java - E4 EPartService findPart()抛出java.lang.Null指针异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24503116/

10-09 00:39