为什么我的Eclipse资源中没有刷新我的资源?

时间:2010-10-18 09:14:16

标签: java eclipse eclipse-plugin eclipse-rcp

我正在使用自定义Eclipse插件。它有一个CustomerExplorer View(Part)可以有效地替换'Project Explorer',它有许多MultiPageEditorPart,每个都有一个XML编辑器和一个Form编辑器,两者都修改了相同的配置文件。 XML编辑器是TextEditor。表单和XML是链接的,每当有pageChange()时,每个都会更新另一个。

我的问题在于我在Eclipse插件中打开的文件的外部修改。如果我在外部编辑器中编辑文件然后加载它(从CustomerExplorer View),切换到XML选项卡后,我将收到消息:

"Resource is out of sync with the file system: '/example/example.xml'.

Press 'F5' or select File > Refresh to refresh the file.

我熟悉使用Eclipse的这个错误,通常只需按下F5,右键单击相关文件并选择刷新或选择文件>从菜单栏刷新通常可以解决它。但是,在这种情况下,F5什么都不做,文件>刷新为灰色并右键单击文件(在我的自定义视图中),上下文菜单不包含“刷新”。我尝试打开“Project Explorer”视图,在上下文菜单中可以使用'Refresh',但这没有任何效果。

从阅读中我已经了解到这些资源应该被eclipse刷新,但事实并非如此。有关为什么的任何指示?

2 个答案:

答案 0 :(得分:0)

很难确切地说明这里发生了什么,但您可能需要明确地将用于刷新资源的操作集添加到自定义视图中。

答案 1 :(得分:0)

解决问题的另一种方法可能是跟踪对文件的更改,并在存在时更新您的视图:

ResourcesPlugin.getWorkspace().addResourceChangeListener(new MyResourceTracker(), IResourceChangeEvent.POST_CHANGE);

有类似的东西:

public class MyResourceTrackerimplements IResourceChangeListener {
    @Override
    public void resourceChanged(final IResourceChangeEvent ev) {
        if (ev.getDelta() != null) {
            try {
                ev.getDelta().accept(new IResourceDeltaVisitor() {
                    @Override
                    public boolean visit(final IResourceDelta delta)
                            throws CoreException {
                        // TODO do something
                        return true;
                    }
                });
            } catch (CoreException e) {
                // TODO
            }
        }
    }
}