2013-11-13 2 views
2

Вот у меня есть мой метод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 невозможно. У меня есть два экземпляра одного и того же объекта в этом векторе, потому что я подключил только один клиент.

ответ

6

У вас есть паразитная точка с запятой в конце из if:

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

Это делает блок кода, который следует выполнить независимо от условий if.

+0

+1 для поддельных. – yamafontes

+0

OMG - перекодировка. Спасибо! – mark

Смежные вопросы