一个java.lang.NullPointerException

时间:2013-08-06 12:59:27

标签: java nullpointerexception

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

5 个答案:

答案 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

intwonull时存在,对吧?所以很明显,下一行intwo将是null 并将导致NullPointerException

String[] items = (intwo).split(","); //java.langNullPointerException

答案 2 :(得分:1)

查看您的代码:

while ((intwo = is.readLine()) != null)

什么时候退出while循环?当intwonull时!

所以当你退出循环时,你正在做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