问题描述
我花了两天多的时间对此进行调查,但不好的是它没有解决。
我的问题
我正在编写一个程序(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)
1楼
Stackoverflow对我来说是幸运的。 很长时间以来,我一直在为问题而苦苦挣扎,并发布我的问题,它很快就可以解决。
我在eclipse的bug论坛中寻找,并找到了 。
据此,如果您的项目的lib文件夹中有某些jar,它将无法正常工作。 您需要将它们定义为从属插件列表,并从eclipse \\ plugins而非lib中获取它们。 以我为例。
不过,如果你们当中有人知道如何在不涉及日食的情况下打造无头环境,即使用命令行,请告诉我。 目前,我正在获得IJavaProject的对象。
谢谢