2013-07-06 37 views
0

我是GEF的新手。 所以我試圖按照我的項目文件中的示例示例。getActiveWorkbenchWindow()當我在postStartup()方法中調用它時返回null

但是,當我試圖開始我的例子,我得到了一個N​​ullPointerException。

at kr.co.hoony.test.ApplicationWorkbenchAdvisor.postStartup(ApplicationWorkbenchAdvisor.java:37) 

而且我的代碼如下圖所示。

@Override 
public void postStartup() { 

      try { 

       IWorkbenchPage wbPage = PlatformUI.getWorkbench() 
         .getActiveWorkbenchWindow() 
         .getActivePage(); 

       wbPage.openEditor(
         new MyEditorInput("KSH"), 
         MyGraphicalEditor.ID, 
         false); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 


} 

所以我試圖尋找,我發現一個解決方案,我再次嘗試像下面。

@Override 
public void postStartup() { 

    Display.getDefault().asyncExec(new Runnable() { 

     @Override 
     public void run() { 

      try { 

       IWorkbenchPage wbPage = PlatformUI.getWorkbench() 
         .getActiveWorkbenchWindow() 
         .getActivePage(); 

       wbPage.openEditor(
         new MyEditorInput("KSH"), 
         MyGraphicalEditor.ID, 
         false); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

     } 
    }); 

} 

那麼,有沒有錯誤消息,但還有另一個問題。

我想在活動頁面上顯示一些標籤,但它不起作用。

所以我要上傳我寫

Block.java

package kr.co.hoony.test.example; 

public class Block { 

    private String name; 
    private String width; 

    public Block() { 

     this.name = "Block"; 
     this.width = "20"; 

    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getWidth() { 
     return width; 
    } 

    public void setWidth(String width) { 
     this.width = width; 
    } 

} 

BlockEditPartFactory.java

package kr.co.hoony.test.example; 

import org.eclipse.gef.EditPart; 
import org.eclipse.gef.EditPartFactory; 
import org.eclipse.gef.editparts.AbstractGraphicalEditPart; 

public class BlockEditPartFactory implements EditPartFactory { 

    @Override 
    public EditPart createEditPart(EditPart context, Object model) { 

     AbstractGraphicalEditPart part = null; 

     if(model instanceof Block){ 
      part = new BlockGrahpicalEditPart(); 
     } 

     part.setModel(model); 
     return part; 
    } 

} 

BlockFigure.java

package kr.co.hoony.test.example; 





import org.eclipse.draw2d.ColorConstants; 
import org.eclipse.draw2d.Figure; 
import org.eclipse.draw2d.Label; 
import org.eclipse.draw2d.LineBorder; 
import org.eclipse.draw2d.XYLayout; 
import org.eclipse.draw2d.geometry.Rectangle; 

public class BlockFigure extends Figure { 

    private Label labelName = new Label(); 
    private Label labelWidth = new Label(); 
    private XYLayout layout; 

    public BlockFigure() { 

     layout = new XYLayout(); 
     setLayoutManager(layout); 

     labelName.setForegroundColor(ColorConstants.blue); 
     add(labelName); 
     setConstraint(labelName, new Rectangle(5, 5, -1, -1)); 

     labelWidth.setForegroundColor(ColorConstants.green); 
     add(labelWidth); 
     setConstraint(labelWidth, new Rectangle(5, 5, -1, -1)); 

     setForegroundColor(ColorConstants.black); 
     setBorder(new LineBorder(5)); 
    } 

    public void setLabelName(Label labelName) { 
     this.labelName = labelName; 
    } 

    public void setLabelWidth(Label labelWidth) { 
     this.labelWidth = labelWidth; 
    } 

    public void setLayout(XYLayout layout) { 
     this.layout = layout; 
    } 

} 

BlockGraphic所有代碼alEditPart.java

package kr.co.hoony.test.example; 

import org.eclipse.draw2d.IFigure; 
import org.eclipse.gef.editparts.AbstractGraphicalEditPart; 

public class BlockGrahpicalEditPart extends AbstractGraphicalEditPart { 

    @Override 
    protected IFigure createFigure() { 
     IFigure figure = new BlockFigure(); 
     return figure; 
    } 

    @Override 
    protected void createEditPolicies() { 
     // TODO Auto-generated method stub 

    } 

} 

MyEditorInput.java

package kr.co.hoony.test.example; 

import org.eclipse.jface.resource.ImageDescriptor; 
import org.eclipse.ui.IEditorInput; 
import org.eclipse.ui.IPersistableElement; 

public class MyEditorInput implements IEditorInput { 

    public String name = null; 

    public MyEditorInput(String name){ 
     this.name = name; 
    } 

    @Override 
    public Object getAdapter(Class adapter) { 
     return null; 
    } 

    @Override 
    public boolean exists() { 
     return (this.name != null); 
    } 

    @Override 
    public boolean equals(Object o) { 
     if(!(o instanceof MyEditorInput)) 
      return false; 
     return ((MyEditorInput)o).getName().equals(this.getName()); 
    } 

    @Override 
    public ImageDescriptor getImageDescriptor() { 
     return ImageDescriptor.getMissingImageDescriptor(); 
    } 

    @Override 
    public String getName() { 
     return this.name; 
    } 

    @Override 
    public IPersistableElement getPersistable() { 
     return null; 
    } 

    @Override 
    public String getToolTipText() { 
     return this.name; 
    } 

} 

MyGraphicalEditor.java

package kr.co.hoony.test.example; 

import org.eclipse.core.runtime.IProgressMonitor; 
import org.eclipse.gef.DefaultEditDomain; 
import org.eclipse.gef.ui.parts.GraphicalEditor; 

public class MyGraphicalEditor extends GraphicalEditor { 

    public static final String ID = "kr.co.hoony.test.example.MyGraphicalEditor"; 

    public MyGraphicalEditor() { 
     setEditDomain(new DefaultEditDomain(this)); 
    } 

    @Override 
    protected void initializeGraphicalViewer() { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void doSave(IProgressMonitor monitor) { 
     // TODO Auto-generated method stub 

    } 

} 

我不知道,不作任何我做標籤的效果的原因。 有沒有人告訴我我還沒有抓到的地步?

回答

0

您必須將EditPartFactory鏈接到您的編輯器類。

public void initializeGraphicalViewer() { 
    GraphicalViewer viewer = getGraphicalViewer(); 
    //here you set the content of the viewer with your model 
      viewer.setContents(getModel()); 
} 

public void configureGraphicalViewer() { 
    super.configureGraphicalViewer(); 
    GraphicalViewer viewer = getGraphicalViewer(); 
    //link the EditPartFactory to the editor 
      viewer.setEditPartFactory(new BlockEditPartFactory()); 
} 

你沒有義務來實現你的正確IEditorInput和 我強烈recomand您先閱讀關於這個問題

一些tutorialsone是一個良好的開端,我

相關問題