2012-09-03 7 views
7

sto ottenendo l'eccezione:Come ritardare modificactions all'albero risorsa quando è bloccato

org.eclipse.core.internal.resources.ResourceException: L'albero delle risorse è bloccato per le modifiche.

Dopo alcune ricerche ho scoperto che questo deriva dal fatto che sto cercando di aggiungere marcatori a un file. Lo sto facendo, quando mi verrà notificato un cambio di file. Quindi, quando viene chiamato il mio codice di modifica, lo spazio di lavoro è ancora nel mezzo del processo di notifica e non consente modifiche alla struttura delle risorse.

Come posso salvare i marcatori in modo che io possa aggiungere al file in seguito o che cosa sarebbe un altro modo per ritardare questo cambiamento?

risposta

8

Non è possibile modificare l'albero risorsa da un gestore di eventi risorsa delta (immaginare il potenziale di caos completo se potesse). L'approccio più comune che conosco è pianificare un lavoro e apportare le modifiche all'interno del metodo run() del lavoro. Ciò significa che è necessario ricordare le modifiche che si desidera apportare in modo che possano essere eseguite all'interno del lavoro. Significa anche che non puoi fare troppe ipotesi sullo stato dell'albero delle risorse perché teoricamente potrebbe essere eseguito un altro Job prima del tuo che apporta modifiche all'albero.

+4

Vedi 'org.eclipse.core.resources.WorkspaceJob' per un esempio di Jobs lavorare con spazi di lavoro. –

0

Change IResourceChangeEvent.PRE_BUILD risolverà questo problema .. ha lavorato per me