2016-05-05 32 views
2

当两个(或更多)客户端连接到服务器时,当我为其中一个客户端按logout时,他成功断开连接。然而,其他客户无限期地在其文本区域上打印"null",所以它不停地打印"null"当客户端注销聊天程序时无限打印“null”

public void run(){ 
     if (socket != null && reader != null) { 
      try { 
       String in; 
       while (keepGoing){ 
        try{ 
         in= reader.readLine(); 
         send(in+"\n"); 
        } 
       } 
      } 
     } 
    } 

注:这是不是一个错误,但错误,所以我没有得到任何的异常。

+0

听起来像是'reader'连接到输入流套接字,已关闭,所以'的readLine()返回'null',然后您可以打印出来的非常接近的一行。一旦'null'被返回,循环返回并再次调用'readLine()'没有意义 - 已经遇到流的结尾。 – AJNeufeld

+0

@AJNeufeld你的意思是'socket!= null'部分?我评论说“如果”陈述(只有条件,而不是全部),我仍然得到错误。 – Guest1235

回答

2

这样做以下:

while (messageLoop){ 
    try{ 
     messageInput = reader.readLine(); 

     if(messageInput == null) break; 

     sendMessage(messageInput+"\n"); 

    } 
    catch(SocketTimeoutException ste){ 
     Thread.yield(); 
    } 
} 
0

这是因为你是从读者阅读无限即使有什么可看。你可以做如下更正代码:

public void run(){ 
    if (socket != null && reader != null) { 
     try { 
      String in; 
      while (keepGoing){ 
       if(reader != null){ 
        try{ 
         in= reader.readLine(); 
         send(in+"\n"); 
        } 
        catch(Exception e){ 
         //Exception thrown, do something about it 
        } 
       } 
       else{ 
         // nothing to read, do something else 
       } 
      } 
     } 
    } 
}