繁体   English   中英

EMenuService在@postConstruct中抛出nullpointerException

[英]EMenuService throwing nullpointerException in @postConstruct

我正在尝试在RCP E4浏览器中自定义鼠标右键单击,我在application.e4xmi中创建了弹出菜单,这是触发右键单击事件的代码。

用于在零件堆栈中创建零件:

 public void showBrowser(Composite parent, EModelService service,
            MApplication application, EPartService partservice) {
        MPartStack mpartstack = (MPartStack) service.find(
                "com.example.e4.rcp.wizard.partstack.confps", application);
        MPart navigationpart = partservice
                .createPart("com.example.e4.rcp.wizard.partdescriptor.navigate_pd");
        navigationpart.setLabel("Visual Navigator");
        // for adding the menucontext

        //
        mpartstack.getChildren().add(navigationpart);
        MPartStack metadata_ps = (MPartStack) service.find(
                "com.example.e4.rcp.wizard.partstack.metadataPS", application);
        metadata_ps.setVisible(true);
        MPart metadatapart = partservice
                .createPart("com.example.e4.rcp.wizard.partdescriptor.metadatadesc");
        metadatapart.setLabel("Metadata");
        metadata_ps.getChildren().add(metadatapart);
    }

在零件描述符中:“ com.example.e4.rcp.wizard.partdescriptor.navigate_pd”

@Inject
    IEclipseContext context;
    EMenuService menuservice;

    @PostConstruct
    public void createControll(Composite parent, EModelService service,
            MApplication application) {
   // some other stuffs
   menuservice.registerContextMenu(browser, "com.example.e4.rcp.wizard.popupmenu");
}

它在运行时显示NullPointerException,我也尝试在postconstruct方法中注入EMenuService,但是在这种情况下,结果比预期的要差(您知道为什么)。 我在RCP E4中还很陌生,所以如果我犯了任何基本错误,非常抱歉。

您必须在要注入的每个字段上使用@Inject:

@Inject
IEclipseContext context;
@Inject
EMenuService menuservice;

您现有的代码仅要求注入IEclipseContext

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM