好的,过去一周左右我一直试图解决这个问题,我通常不喜欢在这里问这类问题,但我现在还没有选择。
我是Java的新手,我确信这是首先出现这种情况的原因。
嗯,我在这里要做的是读取带有“WBS”(工作分解结构)节点和“活动”节点的XML文件,并将它们放在此数据结构中供以后使用。我有一个名为WBS
的类,它基本上由子WBS
个对象的ArrayList和另一个Activity
个对象的ArrayList(另一个小类)组成。现在问题是:我可以从XML文件中获取所有“WBS”节点,我可以获得“活动”节点,但是当我尝试按顺序获取两个时,我得到了前面提到的“空指针异常”。我发布了所有的代码,因为它存在于许多不同的文件中,坦率地说并不是真的相关。但是,如果您认为它会有所帮助,我可以在其中进行编辑。
如果Problem
行中的任何一行被删除,一切正常(减去所取出的行的功能)
这是有问题的代码:
private WBS getWBSStructure(Element initElement){
WBS structure = new WBS();
structure.setName(initElement.getElementsByTagName("Name").
item(0).getChildNodes().item(0).getNodeValue());
//WBSElement = initElement;
structure.Children = new ArrayList<WBS>();
NodeList initAllChildren = initElement.getChildNodes();
for(int n=0;n<initAllChildren.getLength();n++){
Node Child = initAllChildren.item(n);
String childName = Child.getNodeName();
if(childName=="WBS") {
structure.Children.add(getWBSStructure((Element)Child));//<--Problem 1
continue;
}
if(childName=="Activity") {
structure.Activities.add(getActivity((Element)Child));//<--Problem 2
continue;
}
}
return structure;
}
private Activity getActivity(Element initElement){
Activity act = new Activity();
act.setName(initElement.getElementsByTagName("Name").
item(0).getChildNodes().item(0).getNodeValue());
act.OriginalDuration = Integer.parseInt(initElement.
getElementsByTagName("PlannedDuration").item(0).
getChildNodes().item(0).getNodeValue());
return act;
}
评论请求堆栈跟踪。这是否足够?
显示java.lang.NullPointerException at analyzer_main.PriXMLReader.getWBSStructure(PriXMLReader.java:84) at analyzer_main.PriXMLReader.getWBSStructure(PriXMLReader.java:83) at analyzer_main.PriXMLReader.getWBSStructure(PriXMLReader.java:60) at analyzer_main.main_window $ 1.shellActivated(main_window.java:77) 在org.eclipse.swt.widgets.TypedListener.handleEvent(未知来源) 在org.eclipse.swt.widgets.EventTable.sendEvent(未知来源) 在org.eclipse.swt.widgets.Widget.sendEvent(未知来源) 在org.eclipse.swt.widgets.Widget.sendEvent(未知来源) 在org.eclipse.swt.widgets.Widget.sendEvent(未知来源) at org.eclipse.swt.widgets.Decorations.WM_ACTIVATE(Unknown Source) 在org.eclipse.swt.widgets.Shell.WM_ACTIVATE(未知来源) 在org.eclipse.swt.widgets.Control.windowProc(未知来源) 在org.eclipse.swt.widgets.Canvas.windowProc(未知来源) 在org.eclipse.swt.widgets.Decorations.windowProc(未知来源) 在org.eclipse.swt.widgets.Shell.windowProc(未知来源) 在org.eclipse.swt.widgets.Display.windowProc(未知来源) at org.eclipse.swt.internal.win32.OS.BringWindowToTop(Native Method) 在org.eclipse.swt.widgets.Decorations.bringToTop(未知来源) 在org.eclipse.swt.widgets.Shell.open(未知来源) at analyzer_main.main_window.open(main_window.java:60) 在analyzer_main.main_window.main(main_window.java:45)
答案 0 :(得分:4)
每次运行此代码时,此行应该给出Null指针异常。无论你之前是否编辑了一行。
if (childName=="Activity") {
structure.Activities.add(getActivity((Element)Child));
continue;
您根本没有初始化structure.Activities
。应该有类似的东西:
structure.Activities = new ArrayList<Activity>();