[英]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.