2014-09-10 3 views
4

Я разрабатываю приложение e4. Я хочу, чтобы придать EPartService вне части и обработчика когда я инъекционный 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

Редактировать Я вводил EPartService в класс Part. Класс URI в Application.e4xml - это 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

Затмение делает только прямой впрыск на объекты, которые он «знает» о - в основном объекты, указанные в модели приложения (e4xmi) файлы или созданные с помощью что-то вроде EPartService.showPart.

Если вы хотите сделать прямую инъекцию объектов, которые вы создаете, вам необходимо создать их, используя ContextInjectionFactory. Например:

@Inject IEclipseContext context; 

... 

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

вы также можете сделать инъекцию на класс, созданный в обычном порядке с:

ContextInjectionFactory.inject(myClass, context); 

(это не будет делать инъекции на конструкторе).

Примечание: Поскольку этот код использует непосредственную инъекцию, вы должны запускать его из класса, о котором знает модель приложения Eclipse, например, обработчик команд или MPart.

+0

Когда я @Inject IEclipseContext контекст; контекстный объект дает исключение нулевого указателя – Abhit

+0

Пример кода DisplayRuntimePart myClass = ContextInjectionFactory.make (DisplayRuntimePart.class, контекст); MPart mpart = partService.findPart ("com.rcpe4.myproject.part.datapart"); mpart.setVisible (true); partService.showPart (mpart, PartState.CREATE); – Abhit

+0

Вы должны запустить этот код в классе, который создается Eclipse из модели приложения, чтобы инъекция работала. Итак, MPart или обработчик или что-то в этом роде. –

Смежные вопросы