gpt4 book ai didi

java - 为什么eclipse资源是 "(not open)"?

转载 作者:行者123 更新时间:2023-12-02 07:52:04 26 4
gpt4 key购买 nike

我在 Eclipse 工作区中有一个项目。

enter image description here

当我使用以下代码作为 IJavaProject 打开该项目时,该项目“未打开”。

IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IProject orig = root.getProject(this.projectName);
orig.open(null /* IProgressMonitor */);
orig.refreshLocal(IResource.DEPTH_ZERO, null);
this.javaProject = JavaCore.create(orig);

我使用 open() 方法打开了 IProject,并使用 avoiding "resource is out of sync with the filesystem" 后的 refreshLocal 手动刷新。

enter image description here

我还有其他资源未打开。

enter image description here

我尝试“F5”刷新项目,但不起作用。

可能出了什么问题?如何打开资源?

添加

我尝试使用 new NullProgressMonitor() 打开资源,但没有成功。

orig.open(new NullProgressMonitor());
orig.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());

添加2

通过使用 javaModel 的这段代码,我得到了工作区中所有项目都已关闭的信息。这是否意味着我的工作区已损坏?当我使用 eclipse IDE 打开工作区时,我可以打开并编译 Java 代码。

IJavaModel javaModel = JavaCore.create(root);
this.javaProject = javaModel.getJavaProject(this.projectName);

enter image description here

最佳答案

代码风格:

您应该尽可能避免使用“null”作为参数。这对于可读性(和可维护性)来说总是更好。在这里,API 设计者提供了实际的对象来表示“没有值(value)”:

orig.open(new NullProgressMonitor());
orig.refreshLocal(IResource.DEPTH_ZERO, new NullProgressMonitor());

问题:

我相信您的问题在于第二行:您刷新了项目,但没有刷新其任何成员。如果您尝试使用无限深度以便所有包含的文件实际上都被刷新怎么办?

orig.open(new NullProgressMonitor());
orig.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());

更新:

实际上,你的资源toString中的这个“(未打开)”并不在工作区级别。您的 IProject 和 IFile 已正确打开和刷新(如果您的项目已打开,您可能甚至不需要它)。

Java 模型与工作空间不同,未“打开”的 java 元素在工作空间级别没有任何意义,它仅意味着没有对 java 元素的内容打开缓冲区。您不必担心打开 java 元素,jdt 将在您操作其元素期间需要时完成工作。

您可能想要创建整个 java 模型,而不仅仅是与项目相对应的模型:

IJavaModel javaModel = JavaCore.create(root);
this.javaProject = javaModel.getJavaProject(this.projectName);

这可能会避免以后发生奇怪的错误:)。

关于java - 为什么eclipse资源是 "(not open)"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14260850/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com