2

在这里我有我的方法

System.out.println("removeConnectedUser called. size connectedUsers="+connectedUsers.size());
if(connectedUsers.remove(conUser));
{
  System.out.println("Removing user "+conUser.conn.getRemoteSocketAddress().toString()+"..."+connectedUsers.size());
  writeUserAction(conUser.conn.getRemoteSocketAddress().toString(),"999");
  try
  {
    conUser.conn.close();
  }catch(IOException e){
      System.out.println("Exception in removeConnectedUser");
  }
  ServerMainPanel.updateConnectedUsers(connectedUsers.size());
}

问题是这个方法可能被多次调用,所以它的执行次数超过了必要的次数。为了过滤坏电话,我添加了 if(connectedUsers.remove(conUser)); 但这总是返回 true!这是控制台输出

Error in liveUpdate:java.net.SocketException: Connection reset by peer: socket write error
removeConnectedUser called. size connectedUsers=1
Removing user /10.175.33.179:4085 ...0
Error liveSecUpdate:java.net.SocketException: Socket closed
removeConnectedUser called. size connectedUsers=0
Removing user /10.175.33.179:4085 ...0

因此,vector.remove 始终返回 True,即使向量的大小为零。1- 如果 size()=0,则不可能删除元素,2- 不可能我在这个向量中有两个相同对象的实例,因为我只连接了一个客户端

4

1 回答 1

6

您在 的末尾有一个虚假的分号if

if(connectedUsers.remove(conUser));
                                  ^ REMOVE THIS

这使得后面的代码块不管if条件如何都会执行。

于 2013-11-13T09:26:31.787 回答