rcp(插件开发)资源管理四

eclipse资源监听

1.资源监听必须实现IResourceChangeListener接口

Java代码
  1. IWorkspace workspace = ResourcesPlugin.getWorkspace(); 
  2.    IResourceChangeListener listener = new IResourceChangeListener() { 
  3.       publicvoid resourceChanged(IResourceChangeEvent event) { 
  4.          System.out.println("Something changed!"); 
  5.       } 
  6.    }; 
  7.    workspace.addResourceChangeListener(listener); 
  8.  
  9.    //... some time later one ... 
  10.    workspace.removeResourceChangeListener(listener); 
  1. IWorkspace workspace = ResourcesPlugin.getWorkspace();  
  2.    IResourceChangeListener listener = new IResourceChangeListener() {  
  3.       public void resourceChanged(IResourceChangeEvent event) {  
  4.          System.out.println("Something changed!");  
  5.       }  
  6.    };  
  7.    workspace.addResourceChangeListener(listener);  
  8.   
  9.    //... some time later one ...  
  10.    workspace.removeResourceChangeListener(listener);  

添加资源监听:IWorkspace.addResourceChangeListener(Listener)

删除资源监听:IWorkspace.removeResourceChangeListener(Listener)

2.创建资源的样本

Java代码
  1. IWorkspace workspace = ResourcesPlugin.getWorkspace(); 
  2.    final IProject project = workspace.getRoot().getProject("My Project"); 
  3.    IWorkspaceRunnable operation = new IWorkspaceRunnable() { 
  4.       publicvoid run(IProgressMonitor monitor)throws CoreException { 
  5.          int fileCount =10
  6.          project.create(null); 
  7.          project.open(null); 
  8.          for (int i =0; i < fileCount; i++) { 
  9.             IFile file = project.getFile("File" + i); 
  10.             file.create(null, IResource.NONE,null); 
  11.          } 
  12.       } 
  13.    }; 
  14.    workspace.run(operation, null); 
  1. IWorkspace workspace = ResourcesPlugin.getWorkspace();  
  2.    final IProject project = workspace.getRoot().getProject("My Project");  
  3.    IWorkspaceRunnable operation = new IWorkspaceRunnable() {  
  4.       public void run(IProgressMonitor monitor) throws CoreException {  
  5.          int fileCount = 10;  
  6.          project.create(null);  
  7.          project.open(null);  
  8.          for (int i = 0; i < fileCount; i++) {  
  9.             IFile file = project.getFile("File" + i);  
  10.             file.create(null, IResource.NONE, null);  
  11.          }  
  12.       }  
  13.    };  
  14.    workspace.run(operation, null);  

3.一个简单的完整的资源监听实现类

Java代码
  1. publicclass DocIndexUpdaterimplements IResourceChangeListener { 
  2.       private TableViewer table;//assume this gets initialized somewhere 
  3.       privatestaticfinal IPath DOC_PATH =new Path("MyProject/doc"); 
  4.       publicvoid resourceChanged(IResourceChangeEvent event) { 
  5.          //we are only interested in POST_CHANGE events 
  6.          if (event.getType() != IResourceChangeEvent.POST_CHANGE) 
  7.             return
  8.          IResourceDelta rootDelta = event.getDelta(); 
  9.          //get the delta, if any, for the documentation directory 
  10.          IResourceDelta docDelta = rootDelta.findMember(DOC_PATH); 
  11.          if (docDelta ==null
  12.             return
  13.          final ArrayList changed =new ArrayList(); 
  14.          IResourceDeltaVisitor visitor = new IResourceDeltaVisitor() { 
  15.             publicboolean visit(IResourceDelta delta) { 
  16.                //only interested in changed resources (not added or removed) 
  17.                if (delta.getKind() != IResourceDelta.CHANGED) 
  18.                   returntrue
  19.                //only interested in content changes 
  20.                if ((delta.getFlags() & IResourceDelta.CONTENT) ==0
  21.                   returntrue
  22.                IResource resource = delta.getResource(); 
  23.                //only interested in files with the "txt" extension 
  24.                if (resource.getType() == IResource.FILE &&  
  25.                 "txt".equalsIgnoreCase(resource.getFileExtension())) { 
  26.                   changed.add(resource); 
  27.                } 
  28.                returntrue
  29.             } 
  30.          }; 
  31.          try
  32.             docDelta.accept(visitor); 
  33.          } catch (CoreException e) { 
  34.             //open error dialog with syncExec or print to plugin log file 
  35.          } 
  36.          //nothing more to do if there were no changed text files 
  37.          if (changed.size() ==0
  38.             return
  39.          //post this update to the table 
  40.          Display display = table.getControl().getDisplay(); 
  41.          if (!display.isDisposed()) { 
  42.             display.asyncExec(new Runnable() { 
  43.                publicvoid run() { 
  44.                   //make sure the table still exists 
  45.                   if (table.getControl().isDisposed()) 
  46.                      return
  47.                   table.update(changed.toArray(), null); 
  48.                } 
  49.             }); 
  50.          } 
  51.       } 
  52.    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值