【问题标题】:Exception in thread "Thread-1" java.lang.NullPointerException with BufferedReader [duplicate]带有 BufferedReader 的线程“Thread-1”java.lang.NullPointerException 中的异常 [重复]
【发布时间】:2018-04-08 02:01:00
【问题描述】:

我正在实现一个服务器/客户端程序。我需要在服务器中创建多个线程来处理来自客户端的消息。编译代码的时候出现错误

Exception in thread "Thread-1" java.lang.NullPointerException
at server.run(Program.java:59)

第 59 行是

BufferedReader inFromClient = new BufferedReader(new 
                 InputStreamReader(sSock.getInputStream()));

用于从客户端读取消息。

我的程序代码是:

class Program {
  public static void main(String[] args) throws UnknownHostException, IOException{
      // Program runs as a Server
      if(args.length == 2) {
      String host = args[0];
      int port = Integer.parseInt(args[1]);
      String fileName = "serverFile";
      ServerSocket sSock = null;

      // Open a server socket.
      try {
         sSock = new ServerSocket(port);
      }catch(Exception e) {
         System.out.println("Error: cannot open server socket");
         System.exit(1); // Handle exceptions.
      }

      System.out.println("Server is listening on port " + port);

      while(true) {
         new server(sSock.accept(), fileName).start();
      }
    }
  }
}

class server extends Thread {
  // Thread t = Thread.currentThread();

   Socket sSock = null;
   String fileName = null;
   server(Socket sScok,String fileName) {
   this.sSock = sSock;
   this.fileName = fileName;
 }
  @Override
  public void run() {
    try {
      BufferedReader inFromClient = new BufferedReader(new 
                     InputStreamReader(sSock.getInputStream()));
      PrintWriter sendOut = new PrintWriter(sSock.getOutputStream(), 
                     true);
      String s = inFromClient.readLine();
      System.out.println("receive string " + s + "from client");
      sendOut.println("send Ack to you");
    }catch (IOException e) {
      System.out.println("Error: " + e);
   }
 }
}

我已经挣扎了很长时间......有人可以提供帮助会很棒。

【问题讨论】:

  • 您的server 构造函数有一个名为sScok 的参数,它从未使用过。你的意思是sSock?此外,类名应以大写字母开头。

标签: java multithreading nullpointerexception bufferedreader serversocket


【解决方案1】:

Socket sSock = null; 开头,并且永远不会更新

在你的构造函数中

server(Socket sScok,String fileName) {
this.sSock = sSock;

输入的是sScok而不是sSock,它看起来是一个错字,但对你的代码有很大的影响

修正错字,server(Socket sSock, String fileName) { 应该可以解决问题

【讨论】:

  • 非常感谢!是的!拼写错误导致编译错误。
  • 在收到您的答复后的前 3 分钟内不允许我标记此内容。我现在标记它。谢谢。
【解决方案2】:

你还没有启动sSock 所以sSock.getInputStream() 会抛出一个异常。 main 方法中的 sSock = new ServerSocket(port); 行启动了一个名为 sSock不同变量,而不是 server 类中的变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 2012-12-09
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    相关资源
    最近更新 更多