RCP里响应资源改变以及操作资源[1]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

1.在写Eclipse插件的时候,使插件取得监听资源改变事件的能力的主要方法是
安装resouce change listener.
这个监听器必须实现IResourceChangeListener接口,并且在IWorkspace
上用addResourceChangeListener()方法注册.

如下小段代码所示:

IWorkspace workspace = ResourcesPlugin.getWorkspace();
   IResourceChangeListener listener = new IResourceChangeListener() {
      public void resourceChanged(IResourceChangeEvent event) {
         System.out.println("Something changed!");
      }
   };
   workspace.addResourceChangeListener(listener);

   //... some time later one ...
   workspace.removeResourceChangeListener(listener);
   
当多个文件同时需要改变时,我们要避免让他们每个都引发IResourceChangeEvent,
强烈建议用嵌套方法,把它们放到一个方法里面,然后放到IWorkspaceRunnable的
run()方法里.这样只会引发一次事件.

如下小段代码所示:
   
   IWorkspace workspace = ResourcesPlugin.getWorkspace();
   final IProject project = workspace.getRoot().getProject("My Project");
   IWorkspaceRunnable operation = new IWorkspaceRunnable() {
      public void run(IProgressMonitor monitor) throws CoreException {
         int fileCount = 10;
         project.create(null);
         project.open(null);
         for (int i = 0; i < fileCount; i++) {
            IFile file = project.getFile("File" + i);
            file.create(null, IResource.NONE, null);
         }
      }
   };
   workspace.run(operation, null);
   
可以看到上面的代码里虽然改变了10个文件,但是只广播了一次事件.
只要把操作放到一起,IWorkspaceRunnable是强烈推荐的.

2.一个大型的复杂系统里,保持对用户的响应是非常重要的任务.
对于扩展性的大型程序里更加有挑战性,因为各个子系统不是用来设计和其它系统共享同一个资源的.
感谢eclipse为我们带来了一个非常好的工具:
org.eclipse.core.runtime.jobs
它可以对要同时运行的操作自动分配、执行、管理.

比如说,现在同一时刻需要运行很多任务,只需要分别产生job1,job2,job3...然后分别调用schedule()
方法就全部ok了,api会自己把它们分别运行完.

在我的财务管理程序里,当很大很大的文件要保存时,如果电脑太慢,就不能响应用户了,有了jobs工具,就可以轻松
搞定,它会把可能需要长时间运行的任务放到后台运行.

    系统调用到某个job,调用它的run()方法:
    
例子:
    class TrivialJob extends Job {
      public TrivialJob() {
         super("Trivial Job");
      }
  

本文关键:RCP里响应资源改变以及操作资源
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top