Eclipse插件开发中遇到的一些异常总结

Eclipse插件开发涉及到的方面很广,有时候遇到一些奇怪的错误也很多,以下是我在Eclipse插件开发中遇到一些特别异常后的一些解决方法,这些一些是来自网上搜索到的,一些是自己的总结。这篇随笔将会做为我的积累不断地更新,也希望能帮到一些遇到相同问题的coder们!

 
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()未实现
解决方法:实现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
解决方法:重写getToolTipText()方法return值可以为""或任意字符类型。
    public String getToolTipText() {
        return "";

    }

 

4.文件资源不同步的处理方法

很多时候我们在开发Eclipse程序时,如果对于文件操作没有采用IFile来进行,而是使用java.io.File,亦或者通过第三方的程序去修改文件资源,那么就会引发实际文件与IFile不同步的问题,因为性能的问题,IFile的信息是做了缓存的,所以一般情况下对文件进行操作首先考虑使用IFile本身提供的方法或者Eclipse里提供的一些工具类来进行。但我们并不总是能够保证文件的操作是我们所想的,那么如何判断一个IFile是否和文件系统同步呢?
解决方法:比较文件的IFile对象和java.io.File对象的时间戳,如果不相同,那么刷新IFile对象。
 if(IFile.getLocalTimeStamp() != File.lastModified()) {
     IFile.refreshLocal(int depth, IProgressMonitor monitor);

}

 

5.扩展SWT的widgets出现"org.eclipse.swt.SWTException: Subclassing not allowed" 的处理方法

报错原因:Eclipse有这样句话“Custom widgets are created by subclassing in the existing widget class hierarchy”,意思是扩展widgets的类必须和widgets类是在同一类层次才行。
解决方法:有两种,第一种是将你扩展的类的包改为改成package org.eclipse.swt.widgets,即widgets类在同个类层次;
                         第二种扩展类重写widgets类中进行类层次检查的方法protected void checkSubclass(),做空实现即可。

posted on 2008-10-15 21:35  Louis Chan  阅读(1092)  评论(0编辑  收藏  举报

导航