我的代码存在此问题。它叫做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;
}
}
答案 0 :(得分:4)
以下是对NullPointerException的解释:http://antwerkz.com/dealing-with-nullpointerexceptions/来自文章:
最常见的(对经验丰富的开发人员来说很明显)是你没有初始化变量。
查看该行,看起来obj.nodeList
可能为空。以下是我推断出的结果:
obj
不为空,因为第一行是CHORD obj = new CHORD();
。这意味着您没有将obj
设置为null。Integer
不是空的。这是一个类,你正在调用静态方法。这不能为空,因为那里没有任何东西可以分配。inputArray[1]
可能返回null,但如果发生这种情况,您的堆栈跟踪不会在此行上结束,它可能会在Integer.parseInt
内的某一行结束。我需要看到一个完整的堆栈跟踪。但是看看javadoc of Integer.parseInt,它并没有说它会抛出一个NPE,所以更有证据可以排除它。inputArray
为空,您可能会在第一个if语句中得到错误,因此我可以将其排除在外。 您的代码需要在某处执行obj.nodeList = new NodeList()
或类似的操作。如果没有看到CHORD类的样子,我无法肯定地说。