Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
944 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [java] Probleme incomprehensible avec JDOM (long mais help please:'()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[java] Probleme incomprehensible avec JDOM (long mais help please:'()

n°731014
perchut2
Hell, it's about time...
Posté le 19-05-2004 à 08:36:26  profilanswer
 

Bonjour
 
j'utilise JDOM pour mon projet d'info. Ce projet est un client mail, et je gère les comptes mail avec JDOM.
 
extrait :
 

Code :
  1. import org.jdom.*;
  2. import org.apache.xerces.parsers.DOMParser;
  3. import org.xml.sax.InputSource;
  4. import org.jdom.output.*; 
  5. import org.jdom.input.DOMBuilder; 
  6. import java.io.*;
  7. import javax.swing.*;
  8. public class GestionComptes2  {
  9. public void supprimerCompte(int index) {
  10.  DOMParser parser = new DOMParser();
  11.  org.w3c.dom.Document domDoc = null;
  12.  try{
  13.   parser.parse(new InputSource("comptes.xml" ));
  14.   domDoc = parser.getDocument();
  15.  /****************************************/
  16.       //Conversion du document DOM en document JDOM
  17.  DOMBuilder builder = new DOMBuilder();
  18.  org.jdom.Document documentJDOM = builder.build(domDoc);
  19.  /*****************************************/
  20.  GestionComptes gestion = new GestionComptes();
  21.  int numero = gestion.nombreComptes()+index;
  22.  System.out.println("on va enlever le compte : "+(index));
  23.  documentJDOM.getRootElement().removeContent(index);
  24.  /*****************************************/
  25.  // sortie
  26.   XMLOutputter outputter = new XMLOutputter();
  27.   outputter.output(documentJDOM, System.out);
  28.   FileOutputStream sortie = new FileOutputStream("prout.xml" );
  29.   outputter.output(documentJDOM, sortie);
  30.   sortie.flush();
  31.   sortie.close();
  32.  /******************************************/
  33.  JDialog information = new JDialog();
  34.  JPanel information_panel = new JPanel();
  35.  information.setContentPane(information_panel);
  36.  information.pack();
  37.  information.setVisible(true);
  38.  /*******************************************
  39.   MANQUE :
  40.   ----> supprimer effectivmeent le compte
  41.   ----> fermer la fenetre de compte, pour laisser la place au JDialog
  42.   ----> a la fermeture du JDialog, -> reafficher fenetre compte
  43.  *********************************************/
  44.  }
  45.  catch (Exception e) {System.out.println(""+e);}
  46. }


 
tout d'abord, le parseur xerces parse mon fichier "compte.xml".
ensuite, je convertis le document obtenu en document JDOM. Dès lors, je veux bosser avec ce JDOM.
j'implemente une fonction supprimerCompte qui recoit comme argument un entier, qui provient d'une JList dans une autre classe :
 

Code :
  1. menu_supprimer.addActionListener(
  2.   new ActionListener() {
  3.    public void actionPerformed(ActionEvent e) {
  4.     System.out.println("numero selectionne : "+liste_comptes.getSelectedIndex());
  5.     if (liste_comptes.getSelectedIndex() == -1) {
  6.      System.out.println("choisi un compte tocard !" );
  7.     }
  8.     else {
  9.     GestionComptes2 gestion = new GestionComptes2();
  10.     int numero = liste_comptes.getSelectedIndex() +1;
  11.     gestion.supprimerCompte(numero);
  12.     }
  13.    }
  14.   });


 
donc vous voyez qu'a la fin, je lance la fonction supprimerCompte(numero) ;
 
donc ca se passe comme ca :
 
dans ma JList, si je selectionne un compte, j'ai un entier associé (de 0 pour le premier à trois pour le troisieme), que j'ai majoré de un pour que ca marche.
 
voici mon fichier compte.xml :
 

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <liste_compte>
  3.         <compte>
  4.                 <type>pop</type>
  5.                 <nom>perchut2 sur free</nom>
  6.                 <identite>Perchut2</identite>
  7.                 <adresse>perchut2@free.fr</adresse>
  8.                 <serveur_pop>pop3.free.fr</serveur_pop>
  9.                 <port_pop>110</port_pop>
  10.                 <serveur_smtp>smtp.free.fr</serveur_smtp>
  11.                 <port_smtp>25</port_smtp>
  12.                 <user>perchut2</user>
  13.                 <pass>************</pass>
  14.         </compte><compte>
  15.                 <type>pop</type>
  16.                 <nom>mathieu</nom>
  17.                 <identite>mathieu</identite>
  18.                 <adresse>mathieu*******@free.fr</adresse>
  19.                 <serveur_pop>pop3.free.fr</serveur_pop>
  20.                 <port_pop>110</port_pop>
  21.                 <serveur_smtp>smtp.free.fr</serveur_smtp>
  22.                 <port_smtp>25</port_smtp>
  23.                 <user>mathieu***********</user>
  24.                 <pass>********</pass>
  25.         </compte><compte>
  26.                 <type>qsdfqsd</type>
  27.                 <nom>fsqdf</nom>
  28.                 <identite>qsdf</identite>
  29.                 <adresse>sqdf</adresse>
  30.                 <serveur_pop>sq</serveur_pop>
  31.                 <port_pop>dfqsdf</port_pop>
  32.                 <serveur_smtp>qsdfq</serveur_smtp>
  33.                 <port_smtp>sd</port_smtp>
  34.                 <user>fqsdf</user>
  35.                 <pass>qsdfq</pass>
  36.                 </compte>
  37.         </liste_compte>


 
je precise que les deux premiers comptes ont été ajoutés à la main dans le fichier pendant le developpement, tandis que le troisieme a été ajouté via la fonction :
 

Code :
  1. /* crée un compte */
  2. public void nouveauCompte(String type2,
  3.    String nom2,
  4.    String identite2,
  5.    String adresse2,
  6.    String serveur_pop32,
  7.    String port_pop32,
  8.    String serveur_smtp2,
  9.    String port_smtp2,
  10.    String user2,
  11.    String pass2) {
  12.   int nombre_comptes = 0;
  13.  DOMParser parser = new DOMParser();
  14.  org.w3c.dom.Document domDoc = null;
  15.  try{
  16.   parser.parse(new InputSource("comptes.xml" ));
  17.   domDoc = parser.getDocument();
  18.  /****************************************/
  19.       //Conversion du document DOM en document JDOM
  20.  DOMBuilder builder = new DOMBuilder();
  21.  org.jdom.Document documentJDOM = builder.build(domDoc);
  22.   // sortie  
  23.  XMLOutputter outputter = new XMLOutputter();
  24.  outputter.output(documentJDOM, System.out);
  25.  /*****************************************/
  26.   Element compte1 = new Element("compte" );
  27.   Element type1 = new Element("type" );
  28.   type1.setText(type2);
  29.   compte1.addContent(type1);
  30.   Element nom1 = new Element("nom" );
  31.   nom1.setText(nom2);
  32.   compte1.addContent(nom1);
  33.   Element identite1 = new Element("identite" );
  34.   identite1.setText(identite2);
  35.   compte1.addContent(identite1);
  36.   Element adresse1 = new Element("adresse" );
  37.   adresse1.setText(adresse2);
  38.   compte1.addContent(adresse1);
  39.   Element serveur_pop1 = new Element("serveur_pop" );
  40.   serveur_pop1.setText(serveur_pop32);
  41.   compte1.addContent(serveur_pop1);
  42.   Element port_pop31 = new Element("port_pop" );
  43.   port_pop31.setText(port_pop32);
  44.   compte1.addContent(port_pop31);
  45.   Element serveur_smtp1 = new Element("serveur_smtp" );
  46.   serveur_smtp1.setText(serveur_smtp2);
  47.   compte1.addContent(serveur_smtp1);
  48.   Element port_smtp1 = new Element("port_smtp" );
  49.   port_smtp1.setText(port_smtp2);
  50.   compte1.addContent(port_smtp1);
  51.   Element user1 = new Element("user" );
  52.   user1.setText(user2);
  53.   compte1.addContent(user1);
  54.   Element pass1 = new Element("pass" );
  55.   pass1.setText(pass2);
  56.   compte1.addContent(pass1);
  57.   // (documentJDOM est une instance de la classe org.jdom.Document)
  58.   documentJDOM.getRootElement().addContent(compte1);
  59.   FileOutputStream sortie = new FileOutputStream("comptes.xml" );
  60.   outputter.output(documentJDOM, sortie);
  61.   sortie.flush();
  62.   sortie.close();
  63.   }


 
ca m'a rajouté le dernier compte, sans les sauts de ligne (je les ai rajoutés à la mano, je croyais que c'etait le pb  :pt1cable: )

et donc à l'appel de ma fonction "supprimerCompte(int)" :

 
les trois comptes dans la JList sont dans l'ordre :  
 
Perchut2
mathieu*********
qsdfqsd
 
 
* si je selectionne le premier compte dans la JList :
 
l'output est :
 

numero selectionne : 0
on va enlever le compte : 1
<?xml version="1.0" encoding="UTF-8"?>
<liste_compte>
        <compte>
                <type>pop</type>
                <nom>mathieu*************</nom>
                <identite>Mathieu*************</identite>
                <adresse>mathieu**************@free.fr</adresse>
                <serveur_pop>pop3.free.fr</serveur_pop>
                <port_pop>110</port_pop>
                <serveur_smtp>smtp.free.fr</serveur_smtp>
                <port_smtp>25</port_smtp>
                <user>mathieu*************</user>
                <pass>************</pass>
        </compte>
                <compte>
                <type>qsdfqsd</type>
                <nom>fsqdf</nom>
                <identite>qsdf</identite>
                <adresse>sqdf</adresse>
                <serveur_pop>sq</serveur_pop>
                <port_pop>dfqsdf</port_pop>
                <serveur_smtp>qsdfq</serveur_smtp>
                <port_smtp>sd</port_smtp>
                <user>fqsdf</user>
                <pass>qsdfq</pass>
                </compte>
        </liste_compte>


 
 
si je selectionne le deuxieme :
 

Code :
  1. numero selectionne : 1
  2. on va enlever le compte : 2
  3. <?xml version="1.0" encoding="UTF-8"?>
  4. <liste_compte>
  5.         <compte>
  6.                 <type>pop</type>
  7.                 <nom>perchut2 sur free</nom>
  8.                 <identite>Perchut2</identite>
  9.                 <adresse>perchut2@free.fr</adresse>
  10.                 <serveur_pop>pop3.free.fr</serveur_pop>
  11.                 <port_pop>110</port_pop>
  12.                 <serveur_smtp>smtp.free.fr</serveur_smtp>
  13.                 <port_smtp>25</port_smtp>
  14.                 <user>perchut2</user>
  15.                 <pass>*************</pass>
  16.         </compte>
  17.                 <compte>
  18.                 <type>qsdfqsd</type>
  19.                 <nom>fsqdf</nom>
  20.                 <identite>qsdf</identite>
  21.                 <adresse>sqdf</adresse>
  22.                 <serveur_pop>sq</serveur_pop>
  23.                 <port_pop>dfqsdf</port_pop>
  24.                 <serveur_smtp>qsdfq</serveur_smtp>
  25.                 <port_smtp>sd</port_smtp>
  26.                 <user>fqsdf</user>
  27.                 <pass>qsdfq</pass>
  28.                 </compte>
  29.         </liste_compte>


 
 
* si je selectionne le troisieme :
 

numero selectionne : 2
on va enlever le compte : 3
<?xml version="1.0" encoding="UTF-8"?>
<liste_compte>
        <compte>
                <type>pop</type>
                <nom>perchut2 sur free</nom>
                <identite>Perchut2</identite>
                <adresse>perchut2@free.fr</adresse>
                <serveur_pop>pop3.free.fr</serveur_pop>
                <port_pop>110</port_pop>
                <serveur_smtp>smtp.free.fr</serveur_smtp>
                <port_smtp>25</port_smtp>
                <user>perchut2</user>
                <pass>*******************</pass>
        </compte><compte>
                <type>pop</type>
                <nom>mathieu************** sur free</nom>
                <identite>Mathieu*****************</identite>
                <adresse>mathieu************@free.fr</adresse>
                <serveur_pop>pop3.free.fr</serveur_pop>
                <port_pop>110</port_pop>
                <serveur_smtp>smtp.free.fr</serveur_smtp>
                <port_smtp>25</port_smtp>
                <user>mathieu**********</user>
                <pass>*************</pass>
        </compte><compte>
                <type>qsdfqsd</type>
                <nom>fsqdf</nom>
                <identite>qsdf</identite>
                <adresse>sqdf</adresse>
                <serveur_pop>sq</serveur_pop>
                <port_pop>dfqsdf</port_pop>
                <serveur_smtp>qsdfq</serveur_smtp>
                <port_smtp>sd</port_smtp>
                <user>fqsdf</user>
                <pass>qsdfq</pass>
                </compte>
        </liste_compte>


 
 
voilà, je comprends rien... quelqu'un aurait une idée :??:  [:sisicaivrai]
 
pour ceux qui auraient décroché,  le troisieme compte ne se supprime pas [:joce]


Message édité par perchut2 le 19-05-2004 à 08:39:55
mood
Publicité
Posté le 19-05-2004 à 08:36:26  profilanswer
 

n°731213
pascal34
one point !
Posté le 19-05-2004 à 11:37:28  profilanswer
 

  • Commence par lire et écrire du XML entièrement avec JDOM au lieu d'utiliser Xerces en premier (SAXBuilder te renvoie direct un Document JDom).
  • Travailles avec une classe implémentant ListModel que tu affectes à un JList. Tu fais tes ajouts/supressions dans le modèle et tu rafraîchie la liste.


Après ça on pourra voir  :jap:  
 
 
 

n°731382
perchut2
Hell, it's about time...
Posté le 19-05-2004 à 13:16:29  profilanswer
 

pascal34 a écrit :

  • Commence par lire et écrire du XML entièrement avec JDOM au lieu d'utiliser Xerces en premier (SAXBuilder te renvoie direct un Document JDom).
  • Travailles avec une classe implémentant ListModel que tu affectes à un JList. Tu fais tes ajouts/supressions dans le modèle et tu rafraîchie la liste.


Après ça on pourra voir  :jap:


 
ah je savais pas que SAXbuilder renvoyait un jdom :o, j'ai un peu de mal avec les rares tutos sur cette api :/
 
je vais essayer ca, merci :hello:

n°731385
darklord
You're welcome
Posté le 19-05-2004 à 13:18:19  profilanswer
 

test case

n°731405
pascal34
one point !
Posté le 19-05-2004 à 13:41:31  profilanswer
 

Perchut2 a écrit :

ah je savais pas que SAXbuilder renvoyait un jdom


 
org.jdom.input.SAXBuilder

n°732166
perchut2
Hell, it's about time...
Posté le 19-05-2004 à 21:47:14  profilanswer
 

bon effectivement, c'est plus simple avec SAXBuilder.

Code :
  1. SAXBuilder builder = new SAXBuilder();
  2.  Document documentJDOM = builder.build("comptes.xml" );


 
:)
 
 
Ca a l'air de marcher. Ce n'est pas grace au changement vers SAXBuilder, parce que ca me faisait le meme probleme.
J'ai par contre viré mon fichier, et j'ai commencé avec un fichier vide, créé des comptes, et là je peux les supprimer proprement via la methode que j'ai écrite.
 
donc c'est cool, merci :hello:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [java] Probleme incomprehensible avec JDOM (long mais help please:'()

 

Sujets relatifs
probleme mysterieux avec teste "IF"_actionscript_flashprobleme upload de fichiers
[Java] Pb avec l'API 1.4 de Logging - pb de Handler par défaut[java] détruire un objet
problème de paramètre dans une fonction[Oracle] Problème d'insertion dans une table
[java] comment recupérer une page html online dans une application ?Console java dans un applet
pb dimensionnement de composant en javaProbleme avec ie, affichage de footer
Plus de sujets relatifs à : [java] Probleme incomprehensible avec JDOM (long mais help please:'()


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR