当前位置: 代码迷 >> java >> org.eclipse.jdt.core.JavaCore的create方法始终返回null
  详细解决方案

org.eclipse.jdt.core.JavaCore的create方法始终返回null

热度:29   发布时间:2023-07-26 14:35:33.0

我花了两天多的时间对此进行调查,但不好的是它没有解决。

我的问题

我正在编写一个程序(osgi捆绑软件)以获取IJavaProject对象,以获取Java文件的ICompilationUnits,以查看eclipse提出的建议。

我困在哪里

我的IJavaProject参考始终为null。 我尝试了各种组合。

// Sample is a Java Project I created separately with one Test file, I also accessed this project in which I am coding but its a plugin
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject("Sample"); 
System.out.println(project.getLocation()); // prints absolute path
IProjectNatureDescriptor[] nids = project.getWorkspace().getNatureDescriptors();
for (int i = 0; i < nids.length; i++) {
    System.out.println(nids[i].getNatureId()); // prints all natures associated to IProject
}

System.out.println(project.getWorkspace().validateNatureSet(project.getDescription().getNatureIds()).isOK()); // print true

if (project.isOpen()){
    System.out.println(project.hasNature(JavaCore.NATURE_ID)); // prints true
}

final  IJavaProject javaProject = JavaCore.create(project);
System.out.println("jp=null ?? ====="+(javaProject==null)); // this prints false , I am amazed
System.out.println("jp=null ?? ====="+(javaProject==null)); // throws Null pointer exception

........

另外,在此之前,在我的项目中存在链接错误,因为我从我的库中提供了jar,而eclipse也正在提供。 通过从我的库中排除几个罐子,就可以了。

谁能帮我为什么总是出现Null指针。 我在这里做错了什么?

异常跟踪

java.lang.NullPointerException
    at org.eclipse.jdt.internal.core.JavaModelManager.getInfo(JavaModelManager.java:1577)
    at org.eclipse.jdt.internal.core.Openable.isOpen(Openable.java:376)
    at org.MYPACKAGE.manager.RoasterTransformManager.execute(RoasterTransformManager.java:73)
    at org.MYPACKAGE.manager.TransformManager.transform(TransformManager.java:39)
    at org.MYPACKAGE.Transform.performTransform(Transform.java:46)
    at org.MYPACKAGE.Transform.begin(Transform.java:56)
    at org.MYPACKAGE.Activator.start(Activator.java:22)
    at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:771)
    at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:764)
    at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:721)
    at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:941)
    at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:318)
    at org.eclipse.osgi.container.Module.doStart(Module.java:571)
    at org.eclipse.osgi.container.Module.start(Module.java:439)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1582)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1562)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1533)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1476)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)

Stackoverflow对我来说是幸运的。 很长时间以来,我一直在为问题而苦苦挣扎,并发布我的问题,它很快就可以解决。

我在eclipse的bug论坛中寻找,并找到了 。

据此,如果您的项目的lib文件夹中有某些jar,它将无法正常工作。 您需要将它们定义为从属插件列表,并从eclipse \\ plugins而非lib中获取它们。 以我为例。

不过,如果你们当中有人知道如何在不涉及日食的情况下打造无头环境,即使用命令行,请告诉我。 目前,我正在获得IJavaProject的对象。

谢谢

  相关解决方案