最近学习RCP遇到不少问题,解决后觉得应该写点东西与同道朋友们分享一下。笔者也是刚刚接触RCP如文章中有错误欢迎执政。本文只涉及报错信息及解决方法,希望高手能够解释深层次的原因。


" ​​org.eclipse.ui.PartInitException: Unable to open editor, unknown editor ID: package.class​​"、" ​​org.eclipse.ui.PartInitException: Editor initialization failed: package.class.  Site is incorrect.​​"及" ​​org.eclipse.core.runtime.AssertionFailedException: null argument:A part's title tool tip must be non-null​​"处理方法



1."org.eclipse.ui.PartInitException: Unable to open editor, unknown editor ID: package.class"处理方法

报错原因:plugin.xml中<extension>标签中没有icon项

   <extension

         point="org.eclipse.ui.editors">

      <editor

            class="testrcp.testeditor"

            id="testrcp.testeditor"

            name="New EditorPart">

      </editor>

   </extension>

解决方法:plugin.xml中<extension>加入icon,该项可以为空。

   <extension

         point="org.eclipse.ui.editors">

      <editor

            class="testrcp.testeditor"

            icon=""

            id="testrcp.testeditor"

            name="New EditorPart">

      </editor>

   </extension>



2."org.eclipse.ui.PartInitException: Editor initialization failed: package.class.  Site is incorrect."处理方法

报错原因:EditorPart类的init()未实现

package testrcp;


import org.eclipse.core.runtime.IProgressMonitor;

import org.eclipse.swt.SWT;

import org.eclipse.swt.widgets.Composite;

import org.eclipse.ui.IEditorInput;

import org.eclipse.ui.IEditorSite;

import org.eclipse.ui.PartInitException;

import org.eclipse.ui.part.EditorPart;


public class testeditor extends EditorPart {


    public static final String ID = "testrcp.testeditor"; //$NON-NLS-1$


    /**

     * Create contents of the editor part

     * @param parent

     */

    //@Override


    public void createPartControl(Composite parent) {

        Composite container = new Composite(parent, SWT.NONE);

        //

    }


    @Override

    public void setFocus() {

        // Set the focus

    }


    @Override

    public void doSave(IProgressMonitor monitor) {

        // Do the Save operation

    }


    @Override

    public void doSaveAs() {

        // Do the Save As operation

    }


    @Override

    public void init(IEditorSite site, IEditorInput input)

            throws PartInitException {


    }


    @Override

    public boolean isDirty() {

        return false;

    }


    @Override

    public boolean isSaveAsAllowed() {

        return false;

    }


}

解决方法:实现init()方法如下  

    public void init(IEditorSite site, IEditorInput input)

            throws PartInitException {


        System.out.println(input.toString());

        this.setInput(input);

        this.setSite(site);


    }



3."org.eclipse.core.runtime.AssertionFailedException: null argument:A part's title tool tip must be non-null"处理方法

报错原因:EditorInput类的getToolTipText()返回值为null  

package testrcp;


import org.eclipse.core.runtime.IPath;

import org.eclipse.jface.resource.ImageDescriptor;

import org.eclipse.ui.IPathEditorInput;

import org.eclipse.ui.IPersistableElement;


public class testEditorInput implements IPathEditorInput {


    public testEditorInput() {

        // TODO Auto-generated constructor stub

        super();


    }


    @Override

    public IPath getPath() {

        // TODO Auto-generated method stub

        return null;

    }



    @Override

    public boolean exists() {

        // TODO Auto-generated method stub

        return false;

    }


    @Override

    public ImageDescriptor getImageDescriptor() {

        // TODO Auto-generated method stub

        return null;//WorkbenchImages.getImageDescriptor("");

    }


    @Override

    public String getName() {

        // TODO Auto-generated method stub

        return "testEditorInput";

    }


    @Override

    public IPersistableElement getPersistable() {

        // TODO Auto-generated method stub

        return null;

    }


    @Override

    public String getToolTipText() {

        // TODO Auto-generated method stub

        return null;

    }


    @Override

    public Object getAdapter(Class adapter) {

        // TODO Auto-generated method stub

        return null;

    }


}

解决方法:重写getToolTipText()方法return值可以为""或任意字符类型。

    public String getToolTipText() {

        // TODO Auto-generated method stub

        return "";

    }