org.eclipse.jdt.core.JavaCore的create方法总是返回null

时间:2015-07-16 10:36:33

标签: java nullpointerexception eclipse-plugin osgi-bundle

我花了两天多的时间来调查这个问题,但是我的不好意思没有解决这个问题。

我的问题

我正在编写一个程序(osgi bundle)来获取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

........

另外, 在我的项目之前有一个链接错误,因为我从我的lib提供罐子,eclipse也提供。通过从我的lib中排除几个罐子使其工作。

任何人都可以帮助我,为什么它总是会出现空指针。我在这里做错了什么?

异常跟踪

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)

1 个答案:

答案 0 :(得分:0)

Stackoverflow对我来说很幸运。很长一段时间,当我长期努力解决问题并发布我的问题时,它很快就会解决。

我正在寻找eclipse的bug论坛,我发现这个https://bugs.eclipse.org/bugs/show_bug.cgi?id=75969

根据这个,如果项目的lib文件夹中有某些罐子,它就不会起作用。你需要将它们定义为依赖插件列表,并从eclipse \ plugins而不是lib获取它们。这种情况发生在我的情况下。

如果你们中的任何一个知道如何在不涉及日食的情况下制作无头环境,即使用命令行,请告诉我。现在我得到了IJavaProject的对象。

由于