如何注入EPartService

时间:2014-09-10 07:08:29

标签: eclipse-rcp e4

我正在开发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);  
        }
   }

1 个答案:

答案 0 :(得分:1)

Eclipse只对它'知道'的对象进行直接注入 - 基本上是应用程序模型(e4xmi)文件中提到的对象,或者是使用类似EPartService.showPart的对象创建的。

如果要对您创建的对象进行直接注入,则需要使用ContextInjectionFactory创建它们。例如:

@Inject IEclipseContext context;

...

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

您还可以使用以下方式对以正常方式创建的类进行注入:

ContextInjectionFactory.inject(myClass, context);

(这不会对构造函数进行注入)。

注意:由于此代码使用直接注入,因此必须从Eclipse应用程序模型确实知道的类(例如命令处理程序或MPart)运行它。