Visualizzazione dei risultati da 1 a 6 su 6

Discussione: JAVA ciclo strano

  1. #1

    JAVA ciclo strano

    Ciao a tutti,
    ho scritto un metodo che dovrebbe segare una hashtable da un vector, il problema è che ad un certo punto l'hashtable cambia valore da sola !!!!!


    public void closeConnection(String nick) {
    try {
    en = chatters.elements();
    while(en.hasMoreElements()) {
    connNick = (Hashtable) en.nextElement(); //Estrae le hashtable
    if(((String) connNick.get("nick")).equals(nick)) {//Se il nick passato è uguale a quello della hashtable..
    System.out.println("hash" + connNick.toString()); //Qui ha un valore
    sendDisconnectToClient(nick); //Manda al client la notifica della disconnessione
    System.out.println("hash" + connNick.toString()); //Qui un altro !!!
    chatters.remove(connNick); //Rimuove l'elemento della hash dal vector connessioni
    nicknames.remove(nick); //Rimuove la socket dal vector nicknames
    ss = chatters.toString();
    System.out.println("close" + ss);
    aggiornaListaClient();
    aggiornaListaServer();
    color = "red";
    log.store("Connessione chiusa " + tempSock.toString() + "\n",color);
    }
    }
    }catch (Exception e) {
    System.out.println("Server - Chiusura socket fallita " + e.getMessage());
    }
    }


    GRAZIE A TUTTI !!!

  2. #2
    Utente bannato
    Registrato dal
    Sep 2001
    Messaggi
    413
    da quello che mi sembra di capire l'unica spiegazione plausibile è che il metodo sendDisconnectToClient(nick) effettua qualche operazione sulla hashtable!
    potresti postare pure sendDisconnectToClient(nick) ?

  3. #3
    CERTO !!!

    public void sendDisconnectToClient(String nick) { //Manda un messaggio al client che è stato disconnesso
    try {
    en = chatters.elements();
    while(en.hasMoreElements()) {
    connNick = (Hashtable) en.nextElement();
    if(((String)connNick.get("nick")).toString().equal s(nick)) {
    dataIn = "disconnetti";
    tempSock = (Socket) connNick.get("socket");
    out = tempSock.getOutputStream();
    dataWrite = new ObjectOutputStream(out);
    varPassaggio.clear();
    varPassaggio.put("messaggio",dataIn);
    varPassaggio.put("nicknames",nicknames);
    dataWrite.writeObject(varPassaggio);
    }
    }
    }catch (Exception e) {
    System.out.println("Server - Spedizione messaggio disconnessione fallita " + e.getMessage());
    }
    }

  4. #4
    Utente bannato
    Registrato dal
    Sep 2001
    Messaggi
    413
    mmhhhhh... non riesco a trovare il punto..

    comunque, giusto per dire .. perchè fai 2 volte il casting?

    if ( ( (String)connNick.get( "nick" ) ).toString().equals( nick )
    ti conviene fare :

    if ( ( (String)connNick.get( "nick" ) ).equals( nick )

    vabbè però questi sono dettagli.... :master:

    ah..
    ma non è che nel frattempo c'è qualche altro processo che ti accede alla hashtable?

    oppure: tu quando piazzi i nick dentro l'hashtable ce li piazzi come array di char o stringhe ( domanda idiota ma possibile )?

  5. #5
    No.. i nick sono Stringhe.. dentro le hashtable ci ficco solo nick e socket (sempre stingate...) non mi riesco a spiegare come cavolo fa a cambiarsi da sola !!!!!!

  6. #6
    AHHHHHHH... IDEA !!!!!
    Visto che utilizzano tutti e due en x andarsi a guardare il vector.. non è che fa casino per quello... che si scorre il vector da un certo punto in avanti ???

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.