您的位置:首页 >> 编程开发 >> Java >> Java基础 >> Eclipse >> 正文
Eclipse RSS
 

Eclipse资源改变通知机制

http://www.rdxx.com 04年11月26日 12:12 Blog 我要投稿

关键词: 资源 , Eclipse , IP
 

eclipse资源改变通知机制

请参见原文:

http://www.eclipse.org/articles/Article-Resource-deltas/resource-deltas.html

Resource Change Listener

接口:IresourceChangeListener

   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);

在资源改变的通知期间,workspacelocked来避免产生更多的通知。

Resource API

Resource API在执行creating,copying,movingdeleting操作时会向外广播资源改变事件。

资源操作会嵌套,如Ifile.move操作会触发一个Ifile.create操作创建新的文件,然后再触发一个Ifile.delete操作删除老文件。所以一个Ifile.move操作嵌套了一个Ifile.create操作和一个Ifile.delete操作,但是以上操作只会通知一次

Batching Changes

    当有一批资源改变事件需要通知时,需要采用Batching的方式来提高性能。这样能保证只有一个资源改变事件被广播了出去,而不是多个。

   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);

eclipse 3.0不再保证IworkspaceRunnable它在执行期间会阻止其他的通知发生。这样做的原因是为了保证能够在通知发生期间能够使UI相应用户事件。

eclipse 3.0中引入了一个新类WorkspaceJob,可以将大量的Workspace资源改变操作放到一个Job中在后台执行。

一个更强大的特点当资源在Workspace外部被更改ResourceChangeListener也会被通知到,比如直接对文件系统的文件进行更改。由于大多数的操作系统并没有这种机制,所以需要执行Iresource.refreshLocal操作后,资源改变会通知所有的Listener.

IResourceChangeEvent

l         Event Type

PRE_CHANGE,POST_CHANGE,PRE_BUILD,POST_BUILD,PRE_CLOSE,POST_CLOSE,PRE_DELETE,POST_DELETE

l         IresourceDelta

IresourceDelta.getKind()

9 7 3 1 2 3 4 8 :


 
 
标签: 资源 , Eclipse , IP 打印本文
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站