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

Langage Java Discussion :

[Débutant]Impossible d'énumérer un vecteur


Sujet :

Langage Java

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Août 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [Débutant]Impossible d'énumérer un vecteur
    Bonjour, nouveau sur ce site, en tant qu inscrit mais pas en tant que que consultant, je me retrouve confronter a un probleme que je n arrive pas a resoudre concernant une énumeration de vecteur contenant des classes d une autre application...

    Je vous expose ce sur quoi je suis:

    D'un coté j ai créé une applet, dans laquelle je créer un dictionnaire.Ce dictionnaire comprend une clef en "String", un objet associé "Vector".
    Ce Vector contient des objets de ma propre creation a savoir des objets de classe "Ville" et "Capitale" où la classe "Capitale" est héritée de "Ville".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
         ville ville1 = new ville("plérin","France",205000);
         ville ville2 = new ville("lexingtone","Angleterre",987654);
         Capitale capitale1 =  new Capitale("Paris","France",5000000,"Chirac");
         Capitale capitale2 =  new Capitale("Londre","Angleterre",5000000,"Blaire");
     
     
         Vector essai1 = new Vector();
         Vector essai2 = new Vector();
     
     
         essai1.addElement(ville1);
         essai1.addElement(capitale1);
         essai2.addElement(ville2);
         essai2.addElement(capitale2);
     
         dicopays.put("FR",essai1);
         dicopays.put("AN",essai2);
    voilà le code associé a l entrée dans le dictionnaire des différents éléments.

    Mon applet ensuite se charge de sérialiser le Dictionnaire, donc l objet Hashtable dans un fichier d'objet nomé "sauvegarde.bzh"

    voila pour ce qui est de la récupération de données temporaire en données persistantes.

    Ensuite j ai une autre application , dans laquelle je souhaiterai récupérer ce fichier (remplit d'un objet sérialisé Hashtable) afin d en afficher le contenu dans un "JTree".

    Dans cette application, donc, j'arrive bien a ouvrir ce fichier, récupérer le Hashtable ("Dicopays"), et avoir de nouveau une variable HAshtable remplie dans mon application.

    En initialisant mon JTree de cette facon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JTree jTree1 = new JTree(Dicopays);
    J'obtiens bien mon JTree initialisé quand je lance , seulement cela ne m affiche que les adresses associées et non pas une valeur String de ma classe Ville ou Capitale, normal puisque pour avoir une description "lisible", j ai besoin d 'appeler une methode polymorphique dans ma classe ville/capitale de type
    "NomVille.AffDesc()"

    ALors j'ai eu l idée de faire une enumération de mon dictionnaire récupéré dans mon application et de convertir l'objet le plus bas hierarchiquement en string et non plus en ville et capitale, en utilisant justement ma methode "NomVille.AffDesc()"

    voila le code associé a mon idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
            Enumeration enumDicoListpays;
            Enumeration enumVecListpays;
            String clefListpays = new String();
            Vector vecListpays = new Vector();
            String Description = new String();
            Vector VectConv = new Vector();
            enumDicoListpays = Dicopays.elements();
            do {
              vecListpays = (Vector)enumDicoListpays.nextElement();
              enumVecListpays = vecListpays.elements();
              while (enumVecListpays.hasMoreElements())
              {
               Description = ((ville)enumVecListpays.nextElement()).AffDesc();
               VectConv.addElement(Description);
              }
              DicoConv.put(clefListpays, VectConv);
            }
            while (enumDicoListpays.hasMoreElements());
    Ensuivant le code on peut voir que je suis obligé a un moment donné de "caster" : enumVecListpays.nextElement(), car c est bien un objet ville que j ai a cet endroit.
    Alors au début ca ne marchait pas, j ai du exporter mon applet en librairie, que j ai importé dans mon application, ce qui m a permit, en fait, qu il reconnaisse bien cette classe qui m est propre.
    Jbuilder ne me souligne plus a ce stade "ville" , seulement quand je lance l application il ne veut pas instancier cette classe en fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Principal.java" : impossible de résoudre le symbole : classe ville dans classe verifdico.Principal en ligne 160, colonne 28"
    Voilà donc tout le probleme, Je n arrive pas a recréer une instanciation de classe n appartenant pas a l application, mais que j importe.
    Je pense que quelque chose m echappe a l import.
    Si vous avez une idée n hesitez pas.
    merci

  2. #2
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Pourquoi tu veux absolument le stocker en serialisant les objets? Vu la simplicité de la conversion de tes données en String, tu pourrais les stocker dans un fichier texte... El là tu n'aurais pas de problèmes...

    Petite remarque qui n'a rien à voir : tu utilises java depuis longtemps?
    Car les classes que tu utilises sont déconseillées par sun depuis le nouveau modèle de collections...
    Vector -> ArrayList<Ville>
    Hashtable -> HashMap<String,ArrayList<Ville>>
    Enumeration -> Iterator<Ville> (voire boucle foreach)

    Et le "NomVille.AffDesc()" il faut plutôt faire une méthode qui retourne la description sous forme de chaîne de caractères...

    Mais bon, c'est hors-sujet

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Août 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour cette percision concernant le coté obselete de mon code mais ce que j ai oublié de preciser c est que je suis actuelement en formation, et que mon projet est basé sur la comprehension de ces notions de vecteurs/dictionnaires, j ai noté pour l equivalence, merci.
    j utilise un jbuilder en démo, avec jdk en version 1.4, je ne suis , et je le sais , pas tout a fait a jour, mais essayer de mettre a jour qque chose dans un centre de formation et vous vous retrouvez en état de guerre

    sinon pour le stockage en format texte des données dans le fichier, ca je sais le faire, et effectivement ce serai plus simple, seulement , mon exercice impose le stockage du dictionnaire complet pour garder la structure des données.

    Enfin concernant ma methode "NomVille.AffDesc()" voici qques precisions :

    ma classe ville comprends les accesseurs suivant :

    "Nom()", "Nom(String)"
    "Pays()","Pays(String)"
    "Nbrhabitants()","Nbrhabitants(long)"

    et pour capitale les accesseurs suivants en plus:

    "Maire()","Maire(String)"

    et ma méthode polymorphe "AffDesc()" renvoit deja un string :

    Classe Ville : AffDesc()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     public String AffDesc(){return (m_sNom+" est une ville de "+m_sPays+Categorie());}
    Classe Capitale : AffDesc():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public String AffDesc(){
         String message = new String("");
         if (this.NbHabitants()==0){message = "! Non precisé ! , et est ";}
         else message=message+this.NbHabitants();
         return (this.Nom()+", est la capitale de la"+this.Pays()+" ("+message+" ) presidé par "+m_sPresident);}

    justement c est faire appelle a cette methode dans mon enumeration et rerentrer ca dans un nouveau dictionnaire que je veux faire , mais le casting "(ville)" il n en veut pas!(voir code premier post)

Discussions similaires

  1. [Débutant] Impossible de s'authentifier
    Par unix27 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 21/07/2006, 16h20
  2. [débutant]impossible d'éxecuter avec Code::blocks!
    Par Antigonos Ier Gonatas dans le forum Code::Blocks
    Réponses: 6
    Dernier message: 31/05/2006, 19h53
  3. [Débutant] Impossible de fermer la fenêtre AWT
    Par oodini dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 15/01/2006, 13h44
  4. [Débutant] [JTable] affichage d'un vecteur
    Par neXistPa dans le forum Composants
    Réponses: 12
    Dernier message: 08/12/2005, 16h11
  5. [jar][débutant] Impossible d'executer un jar
    Par dacid dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 05/12/2005, 21h10

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