2014-11-10 2 views
0

RCP E4 브라우저에서 마우스 오른쪽 버튼을 클릭하여 사용자 정의하려고하는데, application.e4xmi에서 팝업 메뉴를 생성했습니다. 여기 오른쪽 클릭 이벤트를 트리거하는 코드가 있습니다. 파트 디스크립터 내부EMenuService가 @postConstruct에서 nullpointerException을 던지고 있습니다.

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에서 꽤 새로 운다. 그래서 내가 어떤 기본적인 실수를한다면 미안하다.

+0

이 클래스는 무엇입니까? application.e4xmi에서 선언 된 위치는 어디입니까? –

+0

특정 부분 수가 실행 된 후에 호출되는 partDescriptor와 함께 일부 사용자 정의 값과 함께 브라우저 및 기타 자세한 정보가 열립니다. –

+0

어떻게 만들어 졌습니까? 메뉴 서비스가 아닌 컨텍스트 (예 : 대화 컨텍스트)를 사용하는 것 같습니다. –

답변

0

당신은 당신이 주입하려는 각 필드에 @Inject 사용해야합니다

@Inject 
IEclipseContext context; 
@Inject 
EMenuService menuservice; 

기존 코드 만 삽입 할 수 IEclipseContext 요구된다.

+0

감사합니다 그렉,하지만 또한 내가 시도 할 때 내가지고 있다고 오류가 점점 오전 : @PostConstruct \t 공공 무효 createControll (복합 부모, EModelService 서비스, \t \t \t MApplication 응용 프로그램, EMenuService의 menuservice를) {} 예외 : "VisualNavigation.menuservice"처리 할 수 ​​없습니다 : "EMenuService"인수에 대한 실제 값이 없습니다. 그래서이 EMenuService 값을 클래스에 주입하는 데 문제가 있다고 생각합니다. –

관련 문제