Java应用程序或Java小程序编码错误时会发生java.lang.NullPointerException。通常,Java程序(以及程序员)试图访问不存在的Java对象的引用或句柄
我已经绕圈阅读了。我制作了两个最小的文件 - Two.java将编译。
public class Two {
public static int width;
public static int height;
public static void main(String[] args) {
int width = 320;
int height = 100;
System.out.println(width + "," + height);
}
}
eclipse中的One.java会将字符串打印到控制台。我的问题是,如果 它会打印,为什么它是空的? 我试图将字符串转换为int,所以我可以用它做数学。在现实生活中,有两个以上的数字进入。
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class One {
public static int width;
public static int height;
public static void main(String[] args) throws IOException, InterruptedException {
Process p = Runtime.getRuntime().exec("java -jar Two.jar");
BufferedReader is;
String intwo;
is = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((intwo = is.readLine()) != null)
System.out.println(intwo); // Prints to console
String[] items = (intwo).split(","); //java.langNullPointerException
int[] results = new int[items.length];
for (int i = 0; i < items.length; i++) {
results[i] = Integer.parseInt(items[i]);
}
System.out.println(results[1]);
}
}
答案 0 :(得分:2)
while ((intwo = is.readLine()) != null)
System.out.println(intwo); // Prints to console
//Here intwo is guaranteed to be null!!!!
String[] items = (intwo).split(",");
顺便说一句,编写if/while
语句而不用大括号是一种不好的做法。你应该真的避免它。
答案 1 :(得分:1)
这是你的while
条款:
while ((intwo = is.readLine()) != null)
System.out.println(intwo); // Prints to console
intwo
为null
时存在,对吧?所以很明显,下一行intwo
将是null
并将导致NullPointerException
:
String[] items = (intwo).split(","); //java.langNullPointerException
答案 2 :(得分:1)
查看您的代码:
while ((intwo = is.readLine()) != null)
什么时候退出while
循环?当intwo
为null
时!
所以当你退出循环时,你正在做null.split(",");
当然会导致NPE。
在while
循环周围加上括号,你应该没问题。
答案 3 :(得分:1)
while ((intwo = is.readLine()) != null)
System.out.println(intwo); // Prints to console
String[] items = (intwo).split(","); //java.langNullPointerException
当然你会得到NullPointerException。你基本上迭代直到intwo为null(所以你确保 intwo为null)然后你在那个空引用上调用一个方法。
答案 4 :(得分:0)
此:
while ((intwo = is.readLine()) != null)
System.out.println(intwo); // Prints to console
String[] items = (intwo).split(",");
与此相同:
while ((intwo = is.readLine()) != null){
System.out.println(intwo); // Prints to console
}
String[] items = (intwo).split(",");
很明显为什么你会得到一个NullPointerException