2011-08-04 12 views
1

これは1週間ほど前に修正しようとしていましたが、通常ここでこのタイプの質問をするのは好きではありません。しかし、私はこの時点で本当に選択肢がありません。Javaで 'Null Pointer Exception'の原因を特定できません

私はJavaにはとても新しいので、これが最初の理由だと確信しています。

私がここでやろうとしているのは、「WBS」(作業中断構造)ノードと「アクティビティ」ノードを持つXMLファイルを読み込んで、このデータ構造に入れて後で使用できるようにすることです。私はWBSというクラスを持っています。これは基本的に、子の配列リストWBSとオブジェクトActivity(別の小さなクラス)のArrayListから構成されています。ここで問題があります: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でanalyzer_main.PriXMLReader.getWBSStructureでjava.lang.NullPointerExceptionが (PriXMLReader.java:84) (PriXMLReader.java:83) (PriXMLReader.java:60 ) at analyzer_main.main_window $ 1.shellActivated(main_window.java:77) at org.eclipse.swt.widgets.TypedListener.handleEvent(不明なソース) at org.eclipse.swt.widgets.EventTable.sendEvent(不明なソース) at org.eclipse.swt.widgets.Widget.sendEvent(不明なソース) (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。ウィジェット.Control.windowProc(Unknown Source) at org.eclipse.swt.widgets.Canvas.windowProc(Unknown Source) at org.eclipse.swt.widgets.Decorations.windowProc(Unknown Source) at org.eclipse.swt .widgets.Shell.windowProc(Unknown Source) at org.eclipse.swt.widgets.Display.windowProc(Unknown Source) 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

でこの行は、nullポインタ例外あなたがこのコードを実行するたびに与える必要があります。以前に行を編集したかどうかは関係ありません。

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

structure.Activitiesを初期化していません。

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

はい、それは魅力的に機能しました!親切にありがとう!私は1分待たなければなりませんが、あなたの答えを受け入れます。 – Hassan

関連する問題