BufferedReader 线程 "Thread-1" java.lang.NullPointerException 中的异常

Exception in thread "Thread-1" java.lang.NullPointerException with BufferedReader

我正在实施 server/client 计划。我需要在服务器中创建多个线程来处理来自客户端的消息。当我编译代码时,出现错误

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

纠结了好久...有人帮忙就好了。

您还没有启动 sSock 所以 sSock.getInputStream() 抛出异常。 main 方法中的 sSock = new ServerSocket(port); 行启动了一个 server class.[=15 中的变量 sSock 不同的 变量=]

Socket sSock = null; 开始,永远不会更新

在你的构造函数中你有

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

输入的是sScok而不是sSock,看起来是打错了,但是对你的代码影响很大

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