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

Entrée/Sortie Java Discussion :

[debutant][JNI]Stocker des objet pour les rappeler plus tard


Sujet :

Entrée/Sortie Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [debutant][JNI]Stocker des objet pour les rappeler plus tard
    Salut.
    Je voudrais pouvoir stocker (donc pour y recup plus tard) des objets.

    Je m'explique:
    Je fais un appel JNI et il me retourne un objet de type CHardDisk contenant des infos sur le disque dur trouvé. L'appel JNI est effectué autant de fois qu'il y a de disque dur.
    Je souhaiterai stocker l'objet retourné pour pouvoir le restituer plus tard.
    J'ai essayé de stocker ds un tableau, ds un vecteur et grace a la serialization.
    tableau et vector: le dernier objet est stocké dans tous les indexs crés et non 1 index 1 objet comme je le souhaiterai.
    serialization: j'ai mes x objets de type CHardDisk les uns apres les autres, je ne peux donc pas les stocker ds un fichier car le serialize ne supporte pas le resume de fichier (d'apres ce que j'ai compris et d'apres ce que j'ai testé)

    Exemple de creation d'un objet a stocker via un vecteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Vector  listStock = new Vector ();
    /* nbs est le nb de disque durs present                         */
    /* c est l'element que je recherche. ex dd n°1 puis n°2 puis... */
    /* CRecupInfosDD lance l'appel de la fct JNI du meme nom        */
    for (int c = 1; c <=nbs; c++ ) {
       listStock.addElement(CRecupInfosDD(c));
    }
    Si j'essai de lire ensuite le vecteur grace a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (int c = 0; c < nbs; c++ )
    {
         HD = (CHardDisk)listStock.get(c);
         System.out.println(HD.retournernomdd());
    }
    Le system out retournera toujours la meme chose CAD le nom du dernier dd trouvé et non c: d: e: f: ...

    Donc si qq un a une autre solution ou peut m'expliquer ce que je fais mal... je prends car je suis a court d'idées...

  2. #2
    Membre émérite
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Points : 2 999
    Points
    2 999
    Par défaut
    Bonjour,
    Tu es sur que la méthode CRecupInfosDD(c) ne te renvoie pas toujours le même objet? Fais toujours une vérification dans ta première boucle for.
    Sinon, petite remarque, utilise plutôt une ArrayList. Et pour récuperer les elements regarde du côté des Iterator.
    Bonne chance.
    @+
    Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
    Merci de respecter les règles du club.
    Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Comment tester que c pas le meme objet qui est retourné a chaque fois ?

    Ca serait pas ca par hasard:
    A chaque retour du jni si je fais un HD.retournernomdd() j'obtiens le nom retourné du JNI. En fait c comme s'il mettait a jour les nouvelles infos dans cet Objet HD de type CHardDisk().

    Et si c'est bel et bien le cas, sait tu comment faire en sorte que le JNI retourne un nouvel objet a chaque fois ?

    Merci

  4. #4
    Membre émérite
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Points : 2 999
    Points
    2 999
    Par défaut
    Salut,
    Pour verifier fais seulement quelques System.out.pritnln. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for (int c = 1; c <=nbs; c++ ) { 
       CHardDisk chd = CRecupInfosDD(c); 
       System.out.println(chd);
       System.out.println(chd.retournernomdd()); 
       listStock.addElement(chd); 
    }
    Comme ca tu peux vérifier si c'est quelque part dans ta classe java que ca coince, ou si c'est la classe CHardDisk et la methode retournernomdd qui posent problème.
    Si c'est bien CHardDisk qui pose problème, ce serais bien d'avoir son code.
    @+
    Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
    Merci de respecter les règles du club.
    Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Et bien... a premiere vue il me crée bien un nv objet a chaque fois vu que le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(chd);
    me retourne une valeur differente a chaque fois.

    Bon la voila:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    public class CHardDisk {
      private static String Marque="";
      private static long EspaceTotal=0;
      private static long espaceLibre=0;
      private static String FileSystem="";
      private static String Type=""; //disque dur, cdrom, dvd...
      private static String nomStockage=""; //(c:, hda1...)
      private static String labelStockage="";//(disque system, disque videos...)
      private boolean compressed;
     
      public CHardDisk () {
      }
     
      public CHardDisk (String typeStock, String nomStock, String nomLab, String FS, long totalsp, long freesp, boolean comp) {
        Type = typeStock;
        nomStockage = nomStock;
        labelStockage = nomLab;
        FileSystem = FS;
        EspaceTotal = totalsp;
        espaceLibre = freesp;
        compressed = comp;
      }
     
      public void test () {
        System.out.println("Type         : "+Type);
        System.out.println("nomStockage  : "+nomStockage);
        System.out.println("labelStockage: "+labelStockage);
        System.out.println("FileSystem   : "+FileSystem);
        System.out.println("EspaceTotal  : "+EspaceTotal);
        System.out.println("espaceLibre  : "+espaceLibre);
        System.out.println("compressed   : "+compressed);
        System.out.println(" --------------------------------- ");
        System.out.println(" ");
      }
     
      public String OMarque() {
        return Marque;
      }
     
      public long OEspaceTotal() {
        return EspaceTotal;
      }
     
      public String OFileSystem() {
        return FileSystem;
      }
     
      public long OespaceLibre() {
        return espaceLibre;
      }
     
      public String OnomStockage() {
        return nomStockage;
      }
     
      public String OType() {
        return Type;
      }
      public String OlabelStockage() {
        return labelStockage;
      }
    }

  6. #6
    Membre émérite
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Points : 2 999
    Points
    2 999
    Par défaut
    Bonjour,
    Tes variables de classe sont toutes (sauf une) statiques.
    C'est à dire que quand tu modifie une variable, cette modification est valable pour toutes les instances de la classe. Enlève seulement le static devant des variables privées.
    @+
    Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
    Merci de respecter les règles du club.
    Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Oh bordel !
    J'ai cherché comme un ane pendant plus d'une heure et c'etait juste un pb de variable declarée en static...
    Mais quel couillon je suis...

    Merci bcp !!

  8. #8
    Membre émérite
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Points : 2 999
    Points
    2 999
    Par défaut
    Salut,
    Citation Envoyé par Celenor
    J'ai cherché comme un ane pendant plus d'une heure et c'etait juste un pb de variable declarée en static...
    C'est pas très conseillé de programmer trop tard le soir
    @+
    Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
    Merci de respecter les règles du club.
    Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/12/2014, 16h59
  2. [XL-2007] Ou stocker des images pour les utiliser dans un USERFORM?
    Par ThamAL dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 08/11/2013, 20h55
  3. Enregistrer une liste de commande pour les reexecute plus tard
    Par rosty38 dans le forum Général Python
    Réponses: 9
    Dernier message: 28/10/2010, 16h57
  4. Réponses: 6
    Dernier message: 09/12/2007, 14h32
  5. [Debutant] Stocker des objets dans un tableau à plusieurs indices
    Par Invité dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 27/09/2006, 18h04

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