2012-09-03 11 views
7

Otrzymuję wyjątek:Jak opóźnić modificactions do drzewa zasobów, gdy jest zablokowana

org.eclipse.core.internal.resources.ResourceException: Drzewo zasób jest zablokowany do modyfikacji.

Po kilku poszukiwaniach dowiedziałem się, że wynika to z faktu, że próbuję dodać znaczniki do pliku. Robię to, kiedy otrzymuję powiadomienie o zmianie pliku. Więc kiedy mój kod modyfikacji jest nazywany, obszar roboczy nadal znajduje się pośrodku procesu powiadamiania i nie zezwala na modyfikacje drzewa zasobów.

Jak zapisać znaczniki, aby móc je później dodać do pliku lub jaki byłby inny sposób opóźnienia tych zmian?

Odpowiedz

8

Nie można modyfikować drzewa zasobów za pomocą funkcji obsługi zdarzeń delta zasobów (można sobie wyobrazić potencjał całkowitego chaosu, jeśli to możliwe). Najbardziej znanym podejściem jest zaplanowanie zadania i wprowadzenie modyfikacji w metodzie run() zadania. Oznacza to, że musisz zapamiętać modyfikacje, które chcesz wprowadzić, aby można je było wykonać w ramach Zadania. Oznacza to również, że nie można sformułować zbyt wielu założeń dotyczących stanu drzewa zasobów, ponieważ teoretycznie inne zadanie może zostać uruchomione przed twoją zmianą w drzewie.

+4

Zobacz 'org.eclipse.core.resources.WorkspaceJob' na przykład Jobs pracy z obszarów roboczych. –

0

Zmień IResourceChangeEvent.PRE_BUILD rozwiąże ten problem .. Pracował dla mnie

Powiązane problemy