IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

quand j'efface un Vector, ça en efface un autre aussi, je comprend pas


Sujet :

Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Par défaut quand j'efface un Vector, ça en efface un autre aussi, je comprend pas
    Bonjour à tous,

    je travaille sur une ihm en java swing et lorsque je fais un removeAllElements sur un Vector, j'ai remarqué que ça en efface un autre également, alors que je ne veux pas que le second soit effacé, je ne comprend pas d'où ça vient...

    si quelqu'un a une idée...

    Merci à tous
    Valérie

  2. #2
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    salut,

    tu aurais un peu de code à nous présenter ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Par défaut
    Citation Envoyé par nouknouk Voir le message
    salut,

    tu aurais un peu de code à nous présenter ?
    malheureusement non car j'ai laissé mon code au travail
    pour résumer je copie le contenu d'un vecteur a dans un vecteur b

    b.addAll(a);

    puis

    a.removeAllElements();

    et là je m'aperçois que a est vide (normal) mais que b est vide aussi...

  4. #4
    Membre confirmé

    Inscrit en
    Février 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2008
    Messages : 36
    Par défaut Sont les même objets
    Les objets qui sont dans le vecteur b sont les même de vecteur a

    et quand vous supprimez les objets de a les objets de b sont supprimés aussi car ils sont les même .

    pourquoi :
    b.addAll(a);// Ajouter les références (non les objets) à b.

    Comment faire:
    Créer des nouveaux objets de a pour ajouter à b
    Voir la notion de clonage.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Par défaut
    Citation Envoyé par sinpay Voir le message
    Les objets qui sont dans le vecteur b sont les même de vecteur a

    et quand vous supprimez les objets de a les objets de b sont supprimés aussi car ils sont les même .

    pourquoi :
    b.addAll(a);// Ajouter les références (non les objets) à b.

    Comment faire:
    Créer des nouveaux objets de a pour ajouter à b
    Voir la notion de clonage.
    j'avais pensé que l'erreur pouvait venir de là mais je pensais qu'en faisant addAll, ça faisait une copie des objets... selon vous je me suis trompée.

    j'essaierai dès lundi

    Merci

  6. #6
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Citation Envoyé par sinpay Voir le message

    et quand vous supprimez les objets de a les objets de b sont supprimés aussi car ils sont les même
    et alors !!!!

    il a vider le vecteur a et non pas la mémoire

  7. #7
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par sinpay Voir le message
    Les objets qui sont dans le vecteur b sont les même de vecteur a

    et quand vous supprimez les objets de a les objets de b sont supprimés aussi car ils sont les même .

    pourquoi :
    b.addAll(a);// Ajouter les références (non les objets) à b.

    Comment faire:
    Créer des nouveaux objets de a pour ajouter à b
    Voir la notion de clonage.
    Absolument pas...

    Comme l'a dit slim_java, le removeAllElements ne fait que vider la collection et non pas supprimmer les objets (ce qui d'ailleurs n'est pas possible directement en Java).

    Quand on fait un b.addAll(a), b n'a aucune référence vers a, donc si on vide/modifie la collection a, ça n'a strictement aucune incidence sur b. Ce qui est tout à fait normal comme comportement.

    Avec le code que donnes _LittleFlea_, ça devrait fonctionner, il doit y avoir autre chose qui modifie la collection dans ton code.

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    on peut voir le code dans son intégralité?

  9. #9
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    -1 avec sinpay ; +1 avec Baptiste Wicht. Au vu du code fourni, les élements seront présents dans b.

    Il doit y avoir "rocher sur anguille" dans une autre partie de ton code. Amha tu peux vérifier différentes choses:

    1/ t'assurer qu'au moment ou tu fais ton 'b.addAll(a)', 'a' contient bien les éléments que tu t'attendais à ajouter à 'b' (genre une autre partie de ton code fait un 'a.clear()' par inadvertance juste avant, ou bien un 'a = new Vector[...]').

    2/ Vérifier tous les endroits de ton code où la collection est accédée pour s'assurer que tu ne retires pas les éléments quelque part ailleurs.

    3/ Qu'entre le oment du addAll et le check du contenu de b, tu n'aurais pas fait pointer b sur une autre liste que celle où tu as ajouté tes éléments (genre un b = new Vector...).

  10. #10
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    La classe Vector est depreciée, elle n'est conservée que pour des raisons de compatibilité avec les anciens programmes. L'utilisation de ArrayList est préferable.

  11. #11
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par darrylsite Voir le message
    La classe Vector est depreciée, elle n'est conservée que pour des raisons de compatibilité
    Elle n'est pas dépréciée. Par contre elle est synchronisée, ce qui la rend moins performante que l'arraylist.



    @_LittleFlea_ truc bete, vérifie bien que a et b sont bien deux vecteur différents. Parce que si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a = b = new Vector();
    a.add(...);
    b.addAll(a);
    a.removeAll()
    Il est normal que b qui est aussi a finisse vide

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Elle n'est pas dépréciée. Par contre elle est synchronisée, ce qui la rend moins performante que l'arraylist.



    @_LittleFlea_ truc bete, vérifie bien que a et b sont bien deux vecteur différents. Parce que si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a = b = new Vector();
    a.add(...);
    b.addAll(a);
    a.removeAll()
    Il est normal que b qui est aussi a finisse vide
    bonjour,

    merci pour vos réponses. ce sont bien 2 vecteurs différents... je ne compredn toujours pas... en plus je m'aperçois que mon vecteur a se remplit "tout seul", dans certains cas il doit rester vide et apparemment non, il se remplit sans que je le veuille... suis perdue, je suis en train de faire une ihm, que j'ai fait suivant le modèle MVC.

    dites moi, y'a pas un moyen de "surveiller" un vecteur ? c'est à dire que je sache exactement quand un element rentre dedans ? car en regardant dans mon code je ne trouve pas les endroits où il peut se remplir, partout où j'ai écrit des add, j'ai aussi mit des println, mais sur la sortie je n'ai aucun println... donc mon vecteur se remplit forcement autre part...

    c'est incompréhensible

    merci à vous...

  13. #13
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    La méthode "bricoleur" si c'est toi qui instancies tes vecteurs (et que tu es certaine que personne d'autre ne modifie la référence contenue dans les variables a et b): tu peux toujours faire une classe dérivée de Vector qui surcharge les méthodes get, addAll, clear, etc...

    Dans chacune de ces méthodes tu appelles la méthode équivalente de la superclasse et tu ajoutes un println, ou mieux : une ligne pour écrire sur la sortie standard la stack trace complète à chaque appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    new Throwable().printStackTrace();
    genre (code 1.5+, avec utilisation de génériques):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class MyVectorSubclass<E extends Object> extends Vector<E> {
    	public boolean add(E e) {
    		new Throwable().printStackTrace();
    		return super.add(e);
    	}
    	public void clear() {
    		new Throwable().printStackTrace();
    		super.clear();
    	}
     
    	// etc...
    }
    Enfin, tu utilises ta propre classe Vector en lieu et place de la classe Vector de base.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //a = new Vector();
    // remplacé par...
    a = new MyVectorSubclass();

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Par défaut
    AIE AIE AIE les zamis, JE SUIS TROP NULLE !!!!
    je viens de trouver mon erreur, une malheureuse ligne s'est glissée dans mon code où je fais un setA(Vector v), donc en effet non seulement mon vecteur a se remplissait mais en plus il pointait sur la même chose que b...

    je galère sur ça depuis vendredi midi, bouhouhh :'(
    je me foutrais des baffes parfois

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Par défaut
    Citation Envoyé par _LittleFlea_ Voir le message
    AIE AIE AIE les zamis, JE SUIS TROP NULLE !!!!
    je viens de trouver mon erreur, une malheureuse ligne s'est glissée dans mon code où je fais un setA(Vector v), donc en effet non seulement mon vecteur a se remplissait mais en plus il pointait sur la même chose que b...

    je galère sur ça depuis vendredi midi, bouhouhh :'(
    je me foutrais des baffes parfois
    C'est la magie de la programmation ça ^^
    Se rendre compte qu'au final c'était un truc tout bête, mais bon ça arrive à tout le monde.

  16. #16
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Pierre.B Voir le message
    C'est la magie de la programmation ça ^^
    Se rendre compte qu'au final c'était un truc tout bête, mais bon ça arrive à tout le monde.
    Et ce sont souvent les erreurs les plus "bêtes" qui sont les plus difficiles à trouver...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [XL-2010] Effacer une ligne après copie dans un autre onglet
    Par cantegrouille dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/03/2013, 09h00
  2. [XL-2003] Effacer une cellule au changement d'une autre
    Par leloup84 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/11/2012, 14h52
  3. Réponses: 13
    Dernier message: 28/09/2010, 13h39
  4. effacer des lignes, lister les id, modifier autre chose
    Par talvins dans le forum Requêtes
    Réponses: 5
    Dernier message: 27/04/2010, 14h00
  5. Réponses: 4
    Dernier message: 30/11/2007, 08h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo