显示java.lang.NullPointerException

时间:2013-02-09 06:53:34

标签: java pointers arraylist null

我的代码存在此问题。它叫做java.lang.nullpointerexception。而我似乎无法解决它。请帮我看一下。谢谢。我没有包括类名和导入。类名称称为CHORD。我没有公开静态,因为我的assginemnt说不要使用全局变量。

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

}

1 个答案:

答案 0 :(得分:4)

以下是对NullPointerException的解释:http://antwerkz.com/dealing-with-nullpointerexceptions/来自文章:

  

最常见的(对经验丰富的开发人员来说很明显)是你没有初始化变量。

查看该行,看起来obj.nodeList可能为空。以下是我推断出的结果:

  1. 我可以看到obj不为空,因为第一行是CHORD obj = new CHORD();。这意味着您没有将obj设置为null。
  2. 我可以说Integer不是空的。这是一个类,你正在调用静态方法。这不能为空,因为那里没有任何东西可以分配。
  3. inputArray[1] 可能返回null,但如果发生这种情况,您的堆栈跟踪不会在此行上结束,它可能会在Integer.parseInt内的某一行结束。我需要看到一个完整的堆栈跟踪。但是看看javadoc of Integer.parseInt,它并没有说它会抛出一个NPE,所以更有证据可以排除它。
  4. 如果inputArray为空,您可能会在第一个if语句中得到错误,因此我可以将其排除在外。
  5. 您的代码需要在某处执行obj.nodeList = new NodeList()或类似的操作。如果没有看到CHORD类的样子,我无法肯定地说。