2011-08-04 5 views
1

그래, 지난 1 주 정도 동안이 문제를 해결하려고 노력 해왔고, 보통이 유형의 질문을 여기에서하고 싶지 않습니다. 하지만 지금은 선택의 여지가 없습니다.Java에서 'Null Pointer Exception'의 원인을 찾아 낼 수 없습니다.

나는 자바에 대해 매우 새로운 지식을 가지고있다. 나는 이것이 처음부터 이것에 대한 이유라고 확신한다.

글쎄, 지금 내가하려는 것은 "WBS"(작업 분류 구조) 노드와 "활동"노드가있는 XML 파일을 읽고 나중에 사용할 수 있도록이 데이터 구조에 넣는 것입니다. 나는 WBS이라는 클래스를 가지고 있는데, 자식 배열리스트는 WBS이고 다른 하나는 Activity이다 (또 다른 작은 클래스). 이제 여기에 문제가 있습니다 : XML 파일에서 "WBS"노드를 모두 가져올 수 있지만 "Activity"노드를 얻을 수 있지만 모두을 순서대로 가져 오려고하면 위에서 언급 한 "Null Pointer Exception" . 모든 코드를 게시하고 있습니다. 여러 파일에 있기 때문에 솔직히별로 관련이 없습니다. . 그러나 당신이 도움이 될 생각한다면, 나는 그것을 편집 할 수 있습니다

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; 
    } 

댓글 스택 추적. 이것으로 충분합니까?

analyzer_main.PriXMLReader.getWBSStructure에서 analyzer_main.PriXMLReader.getWBSStructure (PriXMLReader.java:83) 에서 analyzer_main.PriXMLReader.getWBSStructure (PriXMLReader.java:84) 에서 java.lang.NullPointerException이 (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에서 에서 에서) (알 수없는 소스) 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 (알 수없는 소스) at org.eclipse.swt.widgets.Shell.WM_ACTIVATE (알 수없는 소스) at org.eclipse.swt. org.eclipse.swt에서 org.eclipse.swt.widgets.Decorations.windowProc (알 소스)에 org.eclipse.swt.widgets.Canvas.windowProc (알 소스)에 widgets.Control.windowProc (알 소스) .widgets.Shell.windowProc (알 수없는 소스) at org.eclipse.swt.widgets.Display.windowProc (알 수없는 소스) at org.eclipse.swt.internal.win32.OS.BringWindowToTop (네이티브 메소드) at org. eclipse.swt.widgets.Decorations.bringToTop (알 수없는 소스) at org.eclipse.swt.widgets.Shell.open (알 수없는 소스)analyzer_main.main_window.main (main_window.java:45)에서 analyzer_main.main_window.open (main_window.java:60)

+1

디버거로 코드를 실행 해 보았습니까? –

+0

예. 어쩌면 Java 지식이 부족하기 때문에 작동하지 않을 수도 있지만 그래도 계속 시도 할 것입니다. – Hassan

+0

@Matt Ball : 실제로 어떻게 해야할지 모르겠습니다. 그게 나쁜가요? – Hassan

답변

4

에서이 라인은 널 포인터 예외를이 코드를 실행할 때마다 시간을 제공해야합니다. 이전에 선을 편집했는지 여부와 상관없이

if (childName=="Activity") { 
    structure.Activities.add(getActivity((Element)Child)); 
    continue; 

structure.Activities을 초기화하지 않았습니다.다음과 같은 것이 있어야합니다 :

structure.Activities = new ArrayList<Activity>(); 
+0

예, 매력처럼 작동했습니다! 감사합니다! 잠시만 기다려야하지만 답을 받아 들일 것입니다. – Hassan

관련 문제