2009-06-22 2 views
2

У меня есть ResourceChangeListener и поймайте событие сохранения. Теперь я хочу добавить код в файл. Как я могу это сделать? Я пытаюсь использовать BufferedReader/BufferedWriter, но я должен обновить файл. Если я попробую его с помощью IFile.refreshlocal(), я получил ошибку, что файл заблокирован?eclipse change content on save

ответ

1

Может быть статьей «How You've Changed! Responding to resource changes in the Eclipse workspace»

Вы должны получить доступ к ресурсу в рабочей области в потокобезопасных образом. (Из this post)

Если вы вносите изменения ресурсов за пределами IWorkspaceRunnable (старый) или WorkspaceJob (новый), что может быть причиной вашего «заперт» сообщение: рабочая область может быть изменена в любое время.
Размещение изменений вашего ресурса внутри WorkspaceJob гарантирует, что у вас не будет проблем с блокировкой с другими потоками.
Вам не нужно обновлять дерево представлений ресурсов или запускать refreshLocal(). WorkspaceJob, если все будет хорошо, вы справитесь с этим.

См. Также статью «On the Job: The Eclipse Jobs API» для получения дополнительной информации о WorkspaceJob.

alt text

[...] наша работа не будет работать, если правило планирования проводится другой нитью для самого корня рабочего пространства или для какой-либо из ресурсов, содержащихся в рабочей области.
Как только это задание выполняется, никакие другие потоки не смогут получить правило для вышеупомянутых ресурсов до тех пор, пока работа в нашем примере не завершится.