我正在开发e4应用程序。我想在Part和Handler之外注入EPartService 当我注入EPartService时,我将得到空指针错误
public class DisplayRuntimePart {
@Inject EPartService partService;
private void displayPart(){
MPart part=partService.findPart("com.rcpe4.myproject.part.datapart");
mpart.setVisible(true);
partService.showPart(mpart, PartState.CREATE);
}
}
我也读过这个问题,但直到没有解决我的问题E4 EPartService findPart() throwing java.lang.Null Pointer Exception
修改 我在Part类中注入了EPartService。 Application.e4xml中的类URI是本类中的bundleclass://com.abc.test/com.abc.test.part.MyPart我编写代码如下。
Class Mypart{
@Inject EPartService prtservice;
@Inject
public MyPart() {
}
@PostConstruct
public void postConstruct(Composite parent) {
parent.setLayout(new FillLayout(SWT.HORIZONTAL));
htmlBrowser = new Browser(parent, SWT.NONE);
}
@PreDestroy
public void preDestroy() {
}
@Focus
public void onFocus() {
}
@Persist
public void save() {
}
public dispalyPart(){
MPart mpart=partService.findPart("com.abc.test.part.datapart"); **Here Getting Null Pointer Exception**
mpart.setVisible(true);
partService.showPart(mpart, PartState.CREATE);
}
}
答案 0 :(得分:1)
Eclipse只对它'知道'的对象进行直接注入 - 基本上是应用程序模型(e4xmi)文件中提到的对象,或者是使用类似EPartService.showPart
的对象创建的。
如果要对您创建的对象进行直接注入,则需要使用ContextInjectionFactory
创建它们。例如:
@Inject IEclipseContext context;
...
MyClass myClass = ContextInjectionFactory.make(MyClass.class, context);
您还可以使用以下方式对以正常方式创建的类进行注入:
ContextInjectionFactory.inject(myClass, context);
(这不会对构造函数进行注入)。
注意:由于此代码使用直接注入,因此必须从Eclipse应用程序模型确实知道的类(例如命令处理程序或MPart)运行它。