【发布时间】:2011-08-04 21:41:12
【问题描述】:
好的,过去一周左右我一直在尝试解决这个问题,我通常不喜欢在这里问这种类型的问题,但我现在真的别无选择。
我对 Java 很陌生,我敢肯定这首先是原因。
好吧,我在这里尝试做的是读取带有“WBS”(工作分解结构)节点和“活动”节点的 XML 文件,并将它们放入此数据结构中以供以后使用。我有一个名为WBS 的类,它基本上由一个子WBS 对象的ArrayList 和另一个Activity 对象的ArrayList(另一个小类)组成。现在问题来了:我可以从 XML 文件中获取所有“WBS”节点,也可以获取“Activity”节点,但是当我尝试按顺序获取它们 both 时,我得到了前面提到的“空指针异常”。我发布了所有代码,因为它位于许多不同的文件中,坦率地说,它并不真正相关。但是,如果您认为它有帮助,我可以编辑它。
如果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 在analyzer_main.PriXMLReader.getWBSStructure(PriXMLReader.java:84) 在analyzer_main.PriXMLReader.getWBSStructure(PriXMLReader.java:83) 在analyzer_main.PriXMLReader.getWBSStructure(PriXMLReader.java:60) 在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(未知来源) 在 org.eclipse.swt.widgets.Decorations.WM_ACTIVATE(未知来源) 在 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(未知来源) 在 org.eclipse.swt.internal.win32.OS.BringWindowToTop(本机方法) 在 org.eclipse.swt.widgets.Decorations.bringToTop(未知来源) 在 org.eclipse.swt.widgets.Shell.open(未知来源) 在analyzer_main.main_window.open(main_window.java:60) 在analyzer_main.main_window.main(main_window.java:45)
【问题讨论】:
-
你试过用调试器单步调试代码吗?
-
是的。也许因为我缺乏任何 Java 知识,这不起作用,但我会继续尝试,
-
@Matt Ball:我实际上不知道该怎么做。这很糟糕吗?
-
PriXMLReader.java 的第 84 行是什么?
-
不要将字符串与 == 进行比较,而是使用等号。例如,不要这样做:
if(childName=="Activity"){,而是这样做:if(childName.equals("Activity")) {。另外,为什么不在您的问题 2 行执行 println 以查看哪个对象为空。此外,您确实应该格式化该代码以使其可读,特别是如果您希望无偿志愿者(我们!)帮助您。对不起,这太糟糕了。
标签: java xml data-structures