2013-05-30 118 views
1

在Eclipse的PDE,什么时候创建寻找资源的变化(使用IResourceChangeEvent),我怎么找出来的时候一个项目?在这种情况下,我可以访问该项目吗?(作为IProject)?Eclipse项目创建检测

回答

1

几个部分这样的回答:

当资源的变化,你的听众得到的事件。从这个事件中,你可以得到一个描述变化资源的变量。你实现了一个访问者(用accept()方法传递给delta),它实际上实现了你对变化的响应,并通过从它的visit()方法回答一个布尔值来控制你想要遍历的delta增量。由于任何新项目都将位于三角洲的顶部,因此您可能不会走得太远。一旦你意识到你正在访问代表新项目的delta节点(你使用flags()和getKind()来查看它是否是一个新项目),你可以采取任何你想要的操作。

这个答案的另一部分是提醒你经常资源的变化是成批的,通常是出于性能的考虑,所以你可能会经过很多文件被创建到该项目正在创建通知新项目。

+0

谢谢克里斯, 偶然,你知道我该如何强制这样的事件吗?为了确保项目刚创建并且没有批处理? –

+0

参见http://www.eclipse.org/articles/Article-Resource-deltas/resource-deltas.html – nitind

+0

无论发生什么事件都会发生。只是,如果该工具批量处理一堆资源模块,那么您将使用增量树来调用一次。访问者递归地遍历(见上),并且该树中的增量将代表该项目。换句话说,在用户重新获得对UI的控制之前,你总是会被调用。 –

0

来补充参考资源变化监听对方的回答...

可靠地检测项目创建实际上是相当困难的。问题在于你定义为项目创建。对于Eclipse资源层,项目创建是在创建空白项目时(没有任何类型的元数据或文件),但是在典型情况下,您想知道何时创建特定类型的项目。

这意味着你不能假定,当你的代码接收一个项目创建活动,你将能够询问有关该项目的问题。项目创建事件可能与单个批次中的后续文件事件一起传递,或者这些事件可能会分开滴入。

另一个考虑是Eclipse项目的创建有许多不同的场景。它可以是用户运行项目创建向导,或从磁盘导入现有项目,或从Git导入,或者任何其他方式,第三方插件可能会导致项目添加到工作区。每个这些情景将有哪些事件是成批的或细流以稍微不同的方式。

唯一的解决办法是看文件的事件,而不是项目事件。找出您的听众需要询问项目的问题,然后找出哪些文件包含答案并跟踪这些文件。例如,如果您需要检查自然和类路径条目,请监视.project和.classpath文件。不要以为项目总是处于一致的状态。如果您正在通过Git导入部分查看它,可能不会。