Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Eclipse IJavaProject';可以解析的类路径_Java_Eclipse_Eclipse Plugin - Fatal编程技术网

在Eclipse IJavaProject';可以解析的类路径

在Eclipse IJavaProject';可以解析的类路径,java,eclipse,eclipse-plugin,Java,Eclipse,Eclipse Plugin,我正在开发一个Eclipse插件,它在启动时需要遍历工作区中所有打开的Java项目,解析每个项目的类路径,并对其进行处理。到目前为止,我的代码如下所示: public void start(BundleContext context) throws Exception { for (IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) { if (project.isOpen(

我正在开发一个Eclipse插件,它在启动时需要遍历工作区中所有打开的Java项目,解析每个项目的类路径,并对其进行处理。到目前为止,我的代码如下所示:

public void start(BundleContext context) throws Exception {
    for (IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
        if (project.isOpen() && project.getNature(JavaCore.NATURE_ID) != null) {
            IJavaProject javaProject = JavaCore.create(project);
            for (IClasspathEntry cpe : javaProject.getResolvedClasspath(true)) {
                // Do something with cpe
            }
        }
    }
}
问题在于,对于工作区
IJavaProject.getResolvedClasspath(true)
中的某些项目,最初返回的类路径为空。我的猜测是,这些项目尚未完全加载

我还有一个
IResourceChangeListener
,它监听项目的开始/结束,并执行与启动时相同的操作。当我关闭并重新打开一个初始类路径为空的项目时,
IJavaProject.getResolvedClasspath(true)
将返回预期的类路径


我的假设正确吗,这些项目还没有完全加载?我应该如何重新设计它,以便在启动插件时为所有Java项目获得正确解析的类路径?

我自己从EclipseJDT源代码中找到了它。如果类路径正由另一个线程解析,那么
IJavaProject.getResolvedClasspath(布尔)
确实可以返回空的类路径。在尝试获取项目的已解析类路径之前,添加对
JavaCore.initializeAfterLoad(IProgressMonitor)
的调用似乎可以达到目的