Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“线程中的异常”;螺纹-1“;带BufferedReader的java.lang.NullPointerException_Java_Multithreading_Nullpointerexception_Bufferedreader_Serversocket - Fatal编程技术网

“线程中的异常”;螺纹-1“;带BufferedReader的java.lang.NullPointerException

“线程中的异常”;螺纹-1“;带BufferedReader的java.lang.NullPointerException,java,multithreading,nullpointerexception,bufferedreader,serversocket,Java,Multithreading,Nullpointerexception,Bufferedreader,Serversocket,我正在实现一个服务器/客户端程序。我需要在服务器中创建多个线程来处理来自客户端的消息。当我编译代码时,出现了一个错误 Exception in thread "Thread-1" java.lang.NullPointerException at server.run(Program.java:59) 第59行是 BufferedReader inFromClient = new BufferedReader(new InputStreamReader(sS

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

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()
引发异常。
sSock=newserversocket(端口)行启动一个名为
sSock
变量,该变量与
server
类中的变量不同。

您尚未启动
sSock
,因此
sSock.getInputStream()
引发异常。
sSock=newserversocket(端口)行启动一个名为
sSock
变量,该变量与
服务器
类中的变量不同。

套接字sSock=null开始,并且从不更新

在你的构造函数中,你有

server(Socket sScok,String fileName) {
this.sSock = sSock;
输入是
sScok
,而不是
sSock
,看起来像是打字错误,但对代码有很大影响


修正输入错误,
server(Socket-sSock,String-fileName){
应该做的就是开始时使用
Socket-sSock=null;
,并且永远不会更新

在你的构造函数中,你有

server(Socket sScok,String fileName) {
this.sSock = sSock;
输入是
sScok
,而不是
sSock
,看起来像是打字错误,但对代码有很大影响


正在修复服务器的输入错误(
Socket-sSock,字符串文件名){
应该可以做到这一点

你的
服务器
构造函数有一个名为
sScok
的参数,从未使用过。你是说它是
sSock
?另外,类名应该以大写字母开头。你的
服务器
构造函数有一个名为
sScok
的参数,从未使用过。你是指它吗
sSock
?此外,类名应以大写字母开头。非常感谢!是的!打字错误导致编译错误。我不允许在收到您的答案后的前3分钟内标记此错误。我现在标记它。谢谢。非常感谢!是的!打字错误导致编译错误。它不允许我在f中标记此错误收到您的答案后的第一个3分钟。我现在标记它。谢谢。