1

我遇到了 NullPointerException 的另一个问题。这次是突出显示tellen = telno.length()。在你问之前:

  • 文本文件中有要读取到该变量的数据。
  • 所有变量均已初始化。
  • 缓冲阅读器也被初始化。
  • 这是我的代码片段:

    while((telno = br.readLine()) != null){
        name = br.readLine();
    
        surname = br.readLine();
    
        company = br.readLine();
    
        house = br.readLine();
    
        street = br.readLine();
    
        locality = br.readLine();
    
        postcode = br.readLine();
    
        telno = br.readLine();
        tellen = telno.length();
    
        mobno = br.readLine();
    
        sep = br.readLine();
    
        if(tellenx > tellen) tellen = tellenx;
    
    
    }
    

请帮忙。谢谢。文本文件:

  • 姓名
  • 公司
  • 房子
  • 街道
  • 地方性
  • 电话号码
  • 手机号码

问题出在电话 (tellen) 所有这些名字都是虚构的,这个程序是电话簿

George
Farrugia
Some Company 
9, Flowers
Quail Street
Bubaqra
BBQ 1569
21369854
79825643
--------------------------------------------
Paul
Zammit

9
Bird Street
St. Julians
STJ 0000
21545796
79745247
--------------------------------------------
Peter
Spiteri
Oak Company
Trees
Birch Street
Oakgrove
TRE 3333
21323323
99323323
--------------------------------------------

后面Zammit的空格是空格。如果没有数据来避免这样的问题,就会放置它。

4

4 回答 4

1

很可能它是文件的结尾,并且您bufferedReader.readLine()正在返回null并且您只是在一个为 null 的实例上调用了一个方法,这会导致NPE

于 2013-01-31T18:09:03.777 回答
1

之所以会出现此错误,是因为您正在读取11一行while loop而不是您只需要读取10行。

所以在某个时候br.readLine()会回来null

您需要根据需要读取文件,这意味着一次性(您的 while 循环)读取 10 行,然后读取接下来的 10 行,依此类推。

while((telno = br.readLine()) != null){ // first line
    name = br.readLine();   // secondline I think this should be first line

    surname = br.readLine();

    company = br.readLine();

    house = br.readLine();

    street = br.readLine();

    locality = br.readLine();

    postcode = br.readLine();

    telno = br.readLine();
    tellen = telno.length();

    mobno = br.readLine();

    sep = br.readLine();  // eleventh line

    if(tellenx > tellen) tellen = tellenx;


}
于 2013-01-31T18:58:01.893 回答
0

我猜您正在尝试使用 readLine() 读取而不使用 null check.Definitel,它会给出 NPE。

于 2013-01-31T18:11:03.953 回答
0

添加 if 语句来检查是否有任何空引用是检查代码中的错误的好习惯。

伪代码的一个例子是:

   telno = br.readLine();

   if(telno == null)
       System.out.println("this will cause null pointer exception  "+ telno.length()); 
   else
       tellen = telno.length();
于 2013-01-31T18:22:48.980 回答