Хорошо, я пытался исправить это в течение прошлой недели или около того, и я обычно не люблю задавать этот тип вопросов здесь, но у меня действительно нет выбора на данный момент.
Я очень новичок в Java, и я уверен, что причина этого в первую очередь.
Что я пытаюсь сделать, это прочитать файл XML с узлами "WBS" (структура разбивки работ) и узлами "Activity" и поместить их в эту структуру данных для дальнейшего использования. У меня есть класс с именем WBS
, который по существу состоит из ArrayList дочерних WBS
объектов и другого ArrayList из Activity
объектов (еще один маленький класс). Теперь вот проблема: я могу получить все узлы "WBS" из XML-файла, я могу получить узлы "Activity", но когда я пытаюсь получить оба по порядку, я получаю вышеупомянутое " Исключение нулевого указателя". Я публикую весь код, так как он находится в нескольких разных файлах, и, откровенно говоря, не очень актуален. Однако, если вы считаете, что это поможет, я могу отредактировать его.
Если какая-либо из 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.shellActivation (main_window.java:77)
at org.eclipse.swt.widgets.TypedListener.handleEvent (Неизвестный источник)
в org.eclipse.swt.widgets.EventTable.sendEvent (неизвестный источник)
at org.eclipse.swt.widgets.Widget.sendEvent (Неизвестный источник)
at org.eclipse.swt.widgets.Widget.sendEvent (Неизвестный источник)
at org.eclipse.swt.widgets.Widget.sendEvent (Неизвестный источник)
at org.eclipse.swt.widgets.Decorations.WM_ACTIVATE (неизвестный источник)
на org.eclipse.swt.widgets.Shell.WM_ACTIVATE (неизвестный источник)
at org.eclipse.swt.widgets.Control.windowProc (Неизвестный источник)
в org.eclipse.swt.widgets.Canvas.windowProc (неизвестный источник)
at org.eclipse.swt.widgets.Decorations.windowProc (Неизвестный источник)
в org.eclipse.swt.widgets.Shell.windowProc (неизвестный источник)
at org.eclipse.swt.widgets.Display.windowProc (неизвестный источник)
в org.eclipse.swt.internal.win32.OS.BringWindowToTop (собственный метод)
at org.eclipse.swt.widgets.Decorations.bringToTop (Неизвестный источник)
на org.eclipse.swt.widgets.Shell.open (неизвестный источник)
at analyzer_main.main_window.open (main_window.java:60)
at analyzer_main.main_window.main (main_window.java:45)