getActiveWorkbenchWindow() return null when I called it in postStartup() method

StackOverflow https://stackoverflow.com/questions/17499505

  •  02-06-2022
  •  | 
  •  

Question

I'm a newbie at GEF. So I'm trying to follow sample example in my project files.

But when I tried to start my example, I got a NullPointerException.

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

And my code is like bellow.

@Override
public void postStartup() {

            try {

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

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

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


}

So I tried to search, and I find one solution and I tried again like below.

@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();
            }

        }
    });

}

Then, there is no error message, but there is another problem.

I want to show some label on active page, but it doesn't work.

So I want to upload all codes that I write

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;
    }

}

BlockGraphicalEditPart.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

    }

}

I don't know the reason that make no effect of labels that I made. Is there anybody who tell me the point which I don't catch yet?

Was it helpful?

Solution

you have to link the EditPartFactory to your editor class.

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());
}

You're not obliged to implement your proper IEditorInput and I highly recomand you to first read some tutorials on the subject

this one was a good start for me

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top