📄 eclipse入门使用指南及开发eclipse插件(1).doc
字号:
但是象前面提到的,PdePlugin.java对下面的例子并不是必需的,我们不用对它进行任何修改。在我们第一个例子中的Weclome插件,根本就没有生成AbstractUIPlugin的继承子类,此时系统会自动为Weclome插件生成一个缺省的主类(类似于Java类构造函数,如果没有声明,系统会指定一个默认的构造函数)。下面的代码是才真正实现了我们新插件的功能,假设这个插件名子是NoticeView:
package com.nidapeng.eclipse.plugin.pde;
import org.eclipse.core.resources.*;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.runtime.CoreException;
import java.util.ResourceBundle;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
public class NoticeView extends ViewPart implements
Runnable,IResourceChangeListener ,IResourceDeltaVisitor{
private ResourceBundle resourceBundle;
private Label label;
private Display disp;
private String dispTxt;
public NoticeView() {
ResourcesPlugin.getWorkspace().addResourceChangeListener(this,
IResourceChangeEvent.PRE_CLOSE
| IResourceChangeEvent.PRE_DELETE
| IResourceChangeEvent.PRE_AUTO_BUILD
| IResourceChangeEvent.POST_AUTO_BUILD
| IResourceChangeEvent.POST_CHANGE);
}
public static IWorkspace getWorkspace() {
//ResourcesPlugin插件的主类!
return ResourcesPlugin.getWorkspace();
}
public void createPartControl(Composite parent) {
label = new Label(parent, SWT.WRAP);
label.setText("change your project status...");
disp = Display.getDefault();
}
public void setFocus() {
}
// 实现IResourceChangeListener接口中的resourceChanged方法
public void resourceChanged(IResourceChangeEvent event) {
IResource res = event.getResource();
switch (event.getType()) {
case IResourceChangeEvent.PRE_CLOSE :
dispTxt = res.getFullPath() + " is about to closed!";
break;
case IResourceChangeEvent.PRE_DELETE :
dispTxt = res.getFullPath() + " is about to be deleted!";
break;
case IResourceChangeEvent.POST_CHANGE :
try {
event.getDelta().accept(this);
} catch (CoreException e) {
e.printStackTrace();
}
break;
case IResourceChangeEvent.PRE_AUTO_BUILD :
try {
event.getDelta().accept(this);
} catch (CoreException e) {
e.printStackTrace();
}
break;
case IResourceChangeEvent.POST_AUTO_BUILD :
try {
event.getDelta().accept(this);
} catch (CoreException e) {
e.printStackTrace();
}
break;
}
disp.syncExec(this);
}
// 实现IResourceDeltaVisitor接口中的visit方法
public boolean visit(IResourceDelta delta) {
IResource res = delta.getResource();
switch (delta.getKind()) {
case IResourceDelta.ADDED :
dispTxt = "Resource "+res.getFullPath()+" was added.";
break;
case IResourceDelta.REMOVED:
dispTxt = "Resource "+res.getFullPath()+" was removed.";
break;
case IResourceDelta.CHANGED :
dispTxt = "Resource "+res.getFullPath()+" has changed.";
break;
}
return true; // visit the children
}
// 实现Runnable接口中的run方法
public void run() {
try {
label.setText(dispTxt);
} catch (Exception e) {
e.printStackTrace();
}
}
}
(未完待续)
Eclipse入门使用指南及开发Eclipse插件(6)
象上面的第一个Welcome插件,这个新插件同样继承了ViewPart,不同的是实现了三个接口:Runnable,IResourceChangeListener ,IResourceDeltaVisitor。其中的Runnable大家应该很熟悉:多线程的接口。而IResourceChangeListener和IResourceDeltaVisitor是Eclipse系统中的资源接口,这里的资源是指Eclipse中的项目或文件等。在下面运行NoticeView插件的过程中你可以通过添加、打开、删除项目或文件来触发这两个接口中的事件,并在我们的观察窗口中显示相关信息。
在程序中比较奇怪部分的是在resourceChanged()函数里面,并没有象大家想象的那样直接调用label.setText()方法来显示信息,而是调用了disp.syncExec(this),其中的disp是Display类型的对象。这是因为resourceChanged()方法运行的线程和lable所在插件运行的Eclipse主线程并不是同一个线程,如果直接调用label.setText()方法,会抛出一个异常。
下面还需要对项目中的plugin.xml进行一些改动,主要就是加上扩展点声明,这个xml文件和Welcome插件的plugin.xml非常接近,这里就不做过多的说明了。要运行这个插件,可以直接用Eclipse中的运行按钮,因为这个项目是一个Plug-in Project,此时项目会自动以Run-time Workbench方式运行。运行后,会生成一个和当前Eclipse完全一致的平台,在这个平台上可以直接运行NoticeView插件,查看这个插件到底会执行什么功能,也可以用直接Run-time Workbench方式调试插件。这里省去了安装插件,重启动Eclipse等过程,可以看到用PDE开发插件的过程比直接用Java开发环境简洁了很多!
Eclipse的开发不仅仅限于插件的开发,它还可以取代Java中的标准Swing,进行基于Java的独立应用程序GUI开发。它带来的好处是显而易见的:高速,资源占用低,跨平台,代码开放,有大公司的支持等等。
由于Eclipse目前还在开发阶段,笔者在用它调试程序时发现有些性能还不是十分的稳定,一些地方会遇到奇怪的问题,要求使用者能想一些办法解决。不过,以现在Eclipse的开发速度,相信过不了多久,它的各种功能会逐步完善。目前Eclipse虽然有种种不足,但瑕不掩玉,笔者对Eclipse的总体印象还是非常不错的,运行速度,资源占用都要好于IVJ,操作起来也大多顺手,而且即使在现阶段也很少有意外退出等重大的Bug发生,希望未来的Eclipse能真正达到IVJ的功能,VisualCafe的速度,成为广大程序员开发软件的一大利器! (全文完)
Eclipse快捷键指南
本文档从Eclipse软件上整理,是列出了标准的快捷键,未列出Emacs快捷键。
编辑
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -