我实现了ResourceChangeListener并捕获了save事件。现在我想在文件中添加一些代码。我怎么能这样做?我尝试使用BufferedReader / BufferedWriter,但我必须刷新文件。如果我用IFile.refreshlocal()尝试它,我得到一个文件锁定的错误?
答案 0 :(得分:1)
可能是文章“How You've Changed! Responding to resource changes in the Eclipse workspace”
您需要以线程安全的方式访问工作空间中的资源。 (来自this post)
如果您要在IWorkspaceRunnable
(旧)或WorkspaceJob
(新)之外进行资源更改,这可能是您“被锁定”消息的原因:工作区可能是
随时修改。
将资源更改置于WorkspaceJob
内可确保您不会遇到其他线程的锁定问题
您无需更新资源视图树或运行refreshLocal()
。 WorkspaceJob
,如果一切顺利,将为您处理。
有关WorkspaceJob
的更多信息,请参阅文章“On the Job: The Eclipse Jobs API”。
[...]
如果调度规则由工作空间根本身的另一个线程或工作空间中包含的任何资源保存,则我们的作业将不会运行。
一旦此作业运行,在我们的示例中的作业完成之前,其他任何线程都无法获取上述资源的规则。