如果这个标题不具有描述性,我很抱歉;没有代码就很难解释问题。我的问题是:我正在运行此代码
private static Integer[] buffer = new Integer[60];
private static int sum;
...
public static void main(String[] args) throws InterruptedException{
...
while (true) {
try {
main.repaint(); //call paint() method for graphics
rebuffer();
getBufferSum();
//System.out.println(sum);
} catch (NullPointerException e) {}
Thread.sleep(1000);
//}catch(NullPointerException e){e.printStackTrace();}
}
}
private static void getBufferSum() {
System.out.println("Started");
int total = 0;
for(int i = 0; i < 60; i++){
total += buffer[i];
}
System.out.println(total);
sum = total;
}
private static void rebuffer() {
for(int i = 1; i < 60; i++){
buffer[i - 1] = buffer[i];
}
buffer[59] = count;
//System.out.println(count);
count = 0;
System.out.println("Done");
}
我得到了这个输出:
Done
Started
Done
Started
Done
Started
...
为什么行System.out.println(total);
无法执行?
答案 0 :(得分:3)
您的buffer
变量是一个Integer
数组,可以为空(与原始int
相反,默认为0
)。
在getBufferSum
方法中通过索引调用任何元素之前可能尚未初始化任何元素,因此未记录NullPointerException
,因此休眠时间为1秒,因此{{之后打印1}}语句。
你应该在"Done"
语句中添加e.printStackTrace();
来解决这个问题,而不是睡1秒钟。
还要考虑调试代码。
正如Hovercraft Full Of Eels指出的那样,catch
被视为非常糟糕的做法(大多数catch NullPointerException
和所有RuntimeException
s)。
从长远来看,你应该摆脱Error
/ try
。