2012-03-05 7 views
0

동적 인 애플리케이션을 만들고 싶습니다. 다른 플러그인이로드 될 때 TreeTreeItem을 추가하고 싶습니다. 예를 들어Eclipse RCP, RAP,로드 된 플러그인의 다른 뷰에서 트리를 채우는 방법

:

  1. 나는 플러그인이 있습니다 com.project.startup을이 플러그인은 내부 TreeView 있습니다. 이
  2. 나는 플러그인을 가지고 : com.project.populator. com.project.populator

를 시작할 때 나는 항목을 추가하는 방법을 알고 com.project.startup에서 Tree을 채우려하지만 난 내 코드를 작성해야 어디 때 모른다.

지금까지 나는이 사용 org.eclipse.ui.IStartup을했다하지만 난이 오류 :

내 코드는 다음과 같습니다
!MESSAGE Unable to execute early startup code for an extension 
!STACK 0 
java.lang.NullPointerException 
    at ro.project.populator.TreePopulator.earlyStartup(TreePopulator.java:18) 

:

public class TreePopulator implements IStartup 
{ 

    @Override 
    public void earlyStartup() 
    { 
     ViewMenuOffers viewMenuOffers = (ViewMenuOffers) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(ViewMenuOffers.ID); 
     TreeViewer treeViewer = viewMenuOffers.getTreeViewer(); 
     Tree tree = treeViewer.getTree(); 
     TreeItem trtmItem = new TreeItem(tree, SWT.NONE); 
     trtmItem.setText("Item 1"); 
    } 
} 

내가 TreeViewer가 초기화되지 않았 생각 ..하지만이에 createPartControlViewMenuOffers이다.

어떻게하면됩니까? 어떻게 다른 플러그인 onStartup에서 View에 뭔가를 추가 할 수 있습니까?

+3

- 워크 벤치가 열려 있거나 활성 페이지가 때'earlyStartup() '메서드가 호출하게 나타날 것이라고는 보증 할 수 없습니다. 새로운'Job'을 스케쥴 할 수 있습니다. - 작업 관리자가 열리 자마자'JobManager'가 시작될 것이고, 거기서 작업 할 수 있습니다. 그러면 UI를 호출 할 때 실행되도록 보장해야합니다. –

+0

나는 같은 일을하고 있지만'job'을 사용하고 있는데이 오류가 발생합니다 :'내부에서 오류가 발생했습니다 : "방문수 : 메뉴 채우기". 요청 서비스 수명주기 밖에서 사용할 수있는 컨텍스트가 없습니다. ' – Alex

+1

RAP FAQ보기 -> http://wiki.eclipse.org/RAP/FAQ#No_context_available_outside_of_the_request_service_lifecycle –

답변

2

답변을 찾았습니다. 그것은 다음과 같이 수행 할 수 있습니다 : 당신은 초기 시작 플러그인을 등록하고

public class TreePopulator implements IStartup 
{ 

    @Override 
    public void earlyStartup() 
    { 
     PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { 

      @Override 
      public void run() 
      { 
       ViewMenuOffers viewMenuOffers = (ViewMenuOffers) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(ViewMenuOffers.ID); 
       TreeViewer treeViewer = viewMenuOffers.getTreeViewer(); 
       Tree tree = treeViewer.getTree(); 

       TreeItem trtmS = new TreeItem(tree, SWT.NONE); 
       trtmS.setText("Test"); 

      } 

     }); 

    } 

}