有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java NullPointerException和BufferedReader

我的程序不断向我抛出nullPointerException,我不知道为什么。我想可能是因为bufferedReader,但我不确定

String line = reader.readLine();
while (!line.isEmpty()) {
    line = repairLine(line);
    tree.add(line);
    line = reader.readLine();
}

是的,它被包裹在try-catch块中。它说问题在等待解决。它不适用于“if(line!=null)”。我真的不知道是什么原因造成的。谢谢你的帮助


共 (2) 个答案

  1. # 1 楼答案

    问题似乎与以下代码行有关:

    String line = reader.readLine();
    while (!line.isEmpty()) {   
    
    }
    

    如果文件中没有任何内容可读取,则该行将为空。因此,while循环中存在异常。您正在尝试对空引用调用方法

    也就是说,从文件中读取行的传统方法是将读取的行分配给while条件本身中的变量(未测试的代码):

    String line = "";
    while ((line=reader.readLine()!=null) && !line.isEmpty()) {
        line = repairLine(line);
        tree.add(line);
    }
    
  2. # 2 楼答案

    我也有同样的错误,这意味着另一个连接的客户端上的套接字正在关闭,而它正试图在服务器上读取

    为了添加一些上下文,我正在运行一个服务器,各种客户端通过java套接字连接到它。当客户端关闭套接字时,服务器端出现了这个错误

    所以为了解决这个问题,我决定在每次连接之后关闭服务器端和客户端套接字。我这样做的方式是,在关闭客户端之前,它会在关闭其套接字之前向服务器发送一条“退出”消息。当服务器读取“退出”消息时,它还将关闭其套接字

    例如:

    • 客户端
    if(Quit){
       if(mySocket != null && !mySocket.isClosed()) {
            output.println("quit");
            output.flush();
            
            try {
                mySocket.close();
            } catch (IOException e) {
                System.out.println("Close net variables exception - " + e.getMessage());
            }
        }
    }
    
    • 服务器端
    String line = input.readLine(); //Thread stops here untill it reads something
    
    if(line.equals("something")){
       do_something();
    else if(line.equals("quit")){
       try {
            mySocket.close();
        } catch (IOException e) {
            System.out.println("Close net variables exception - " + e.getMessage());
        }
    else{
       do_default();
    }
    

    为我工作,希望有帮助