您的位置:首页 > 编程语言 > Java开发

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

2009-05-13 19:43 423 查看
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(),做空实现即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: