Вот у меня есть мой методJava - метод удаления в векторном классе всегда возвращает истинное
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)); но это всегда верно! Это консольный выход
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 невозможно. У меня есть два экземпляра одного и того же объекта в этом векторе, потому что я подключил только один клиент.
+1 для поддельных. – yamafontes
OMG - перекодировка. Спасибо! – mark