2013-05-30 121 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導入部分查看它,可能不會。