2013-02-09 37 views
-2

我的代码有这个问题。它叫做java.lang.nullpointerexception。我似乎无法修复它。请帮我看看它。谢谢。我没有包含类名和导入。班级名称叫做CHORD。我没有公开静态,因为我的assginemnt说不使用全局变量。java.lang.nullpointerexception

private ArrayList<Integer> nodeList; 

public static void main(String[] args){ 


    CHORD obj = new CHORD(); 
    obj.nodeList = new ArrayList<Integer>(); 

    String filename =""; 

    if(args.length ==1){ 
    filename = args[0]; 
    obj.read(filename); 
    } 

} 

public void read(String file){ 
    CHORD obj = new CHORD(); 
    obj = null; 

    Scanner loadFile = null; 
    try{ 
    loadFile = new Scanner(new File(file)); 
    String inputLine; 

    while(loadFile.hasNextLine()){ 
     inputLine = loadFile.nextLine(); 

     String[] inputArray = inputLine.split(" ",3); 

     if(inputArray[0].equalsIgnoreCase("init")){ 

      int size = Integer.parseInt(inputArray[1]); 
      setSizeFT(init(size)); 
     } 
     else if(inputArray[0].equalsIgnoreCase("addpeer")){ 
      System.out.println("adding"); 
      nodeList.add(Integer.parseInt(inputArray[1])); 

     } 
    } 
    } 
    catch(FileNotFoundException x){ 

    } 
    finally{ 
     System.out.println(getFT()); 
     loadFile.close(); 
    } 
    System.out.println(getFT()); 
} 

public void print(){ 
    CHORD obj = new CHORD(); 
    for(int x =0; x< obj.nodeList.size(); x++){ 
     System.out.println(obj.nodeList.get(x)); 
    } 
} 


public int init(int num){ 
    int n = 23; 
    double k = Math.ceil(Math.log(n)/Math.log(2)); 
    int size = (int)k; 
    return size; 
} 

public void setSizeFT(int size){ 
    sizeFT = size; 
} 

public int getFT(){ 
    return sizeFT; 
} 

}

+0

你能向我们展示CHORD课吗?并且不要用ALLCAPS字母命名你的班级。 – 2013-02-09 06:55:17

+0

'nodeList'可能是'null' - 用'if(obj.nodeList == null)' – Patashu 2013-02-09 06:59:46

+0

检查请你能告诉我们哪一行出现异常吗?并尝试发布Chord类代码 – 2013-02-09 07:03:36

回答

4

这里是什么NullPointerException异常的是一个解释:http://antwerkz.com/dealing-with-nullpointerexceptions/从文章:

最常见的(和明显的经验丰富的开发)是你没有初始化变量。

看着那条线,它看起来像obj.nodeList可能为空。以下是我推断:

  1. 我可以看到,obj不为空,因为第一行是CHORD obj = new CHORD();。这意味着你没有设置obj为空。我知道Integer不是null。这是一个类,你正在调用一个静态方法。这不能为空,因为这里没有什么可以分配的。
  2. inputArray[1]可能返回null,但如果发生这种情况,您的堆栈跟踪不会在此行结束,它可能会在Integer.parseInt内的某行中结束。尽管如此,我仍然需要看到完整的堆栈跟踪。但是看看javadoc of Integer.parseInt,它并没有说它会抛出一个NPE,所以有更多证据可以排除。
  3. 如果inputArray为空,你可能会在第一个if语句中得到错误,所以我可以排除这个错误。

某处你的代码需要做一个obj.nodeList = new NodeList()或类似的东西。我不能确定没有看到CHORD课程的样子。

+0

这里是我的代码看起来像..我有点明白你的意思,我declear obj.nodeList =新的ArrayList ()升上面也有。 – 2013-02-09 07:04:23

+0

@KevinPotatoo你能告诉我们你在哪里做的代码?另外,你能告诉我们你的错误信息吗?将其复制并粘贴到您的问题中,并将其打印出来。它会帮助我们回答。 – 2013-02-09 07:06:01

+0

我不能在这里发布代码,因为太多的单词..我很新的这个网站.. :( – 2013-02-09 07:11:42