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

AWT/Swing Java Discussion :

Erreur dans la javadoc ?


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut Erreur dans la javadoc ?
    Bonjour,

    Ne sachant pas comment procéder pour remonter ma remarque à Sun, je pose mon doute ici... Puisse quelqu'un de compétent faire suivre cette info... (je sais qu'il y en a sur ce forum). Bien sûr, sous réserve que je ne dise pas de bêtises... (je met en doute Sun, je doute donc de mes dires )

    Constructeur TreeModelEvent

    To create a node changed event for the root node, specify the parent and the child indices as null.
    Or, si j'écris ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new TreeModelEvent(this, (Object[])null, null, maRacineModifiée);
    Je me prends une NullPointerException :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: path in TreePath must be non null and not empty.
            at javax.swing.tree.TreePath.<init>(TreePath.java:60)
            at javax.swing.event.TreeModelEvent.<init>(TreeModelEvent.java:114)
            at MaClasse.fireTreeChanged(MaClasse.java:111)
    Or, si j'écris ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new TreeModelEvent(this, new Object[]{maRacineModifiée}, null, null);
    Mon évènement fonctionne parfaitement...

    Donc il faudrait peut être remplacer ce texte dans la javadoc par :

    To create a node changed event for the root node, specify the children and the child indices as null.
    Je ne dis pas de bêtises ?
    C'est peut être connu et reconnu aussi, mais je n'ai rien trouvé sur le net...

  2. #2
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Je retire ma "correction" puisque je ne sais pas trop pourquoi, je n'arrive plus à le faire fonctionner... J'ai du me tromper...

    Bref, ce post peut rejoindre celui-ci : http://www.developpez.net/forums/sho...treemodelevent

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Par défaut
    Juste une idée, tu as essayé avec l'autre constructeur de TreeModelEvent ou on passe un TreePath au lieu de Object[] ? Comme c'est le constructeur du TreePath qui t'envoie l'exception, çà marche peut être

  4. #4
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Et je passe quoi au paramètre du constructeur du TreePath ? null ?

    ... ce qui me génèrera l'erreur de la même façon...

    Non, le problème est que dans la javadoc ils disent qu'on peut et qu'on doit mettre null pour un évènement sur la racine, mais dans les faits, on ne peut pas passer null...

    Je suis en train de regarder le code de la classe DefaultTreeModel et le code de la méthode nodeChanged :

    il apparaît que l'appel d'un changement sur la racine est équivalent au suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new TreeModelEvent(this, new Object[]{laRacine}, new int[]{-1}, new Object[]{laRacine});
    (d'après la source : http://developer.classpath.org/doc/j...el-source.html)


    J'ai testé la même chose, effectivement cela fonctionne. Donc je confirme l'erreur de la javadoc (ma tentative de correction étant fausse)...

    Par contre, je ne trouve pas comment générer un évènement si la racine est supprimée ou ajoutée...

    Je continue de chercher...

  5. #5
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Bon j'ai enfin réussi à signaler à mon JTree la modification et l'ajout d'une racine comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                TreeModelEvent tme = new TreeModelEvent(this, new Object[]{maRacine}, new int[]{-1}, new Object[]{maRacine});
                monTreeModelListener.treeStructureChanged(tme);

    Par contre, pour la suppression de la racine, et donc retrouver un arbre vierge, je ne trouve pas... Si quelqu'un a une idée...

    J'ai essayé cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                TreeModelEvent tme = new TreeModelEvent(this, new Object[]{maRacineSupprimee}, new int[]{-1}, new Object[]{maRacineSupprimee});
                monTreeModelListener.treeNodesRemoved(tme);
    mais sans succès :

    Exception in thread "Thread-38" java.lang.ArrayIndexOutOfBoundsException: node has no children
    at javax.swing.tree.DefaultMutableTreeNode.getChildAt(DefaultMutableTreeNode.java:228)
    at javax.swing.tree.VariableHeightLayoutCache.treeNodesRemoved(VariableHeightLayoutCache.java:543)
    at javax.swing.plaf.basic.BasicTreeUI$Handler.treeNodesRemoved(BasicTreeUI.java:3917)
    at MaClasse.fireRootRemoved(MaClasse.java:127)

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Par défaut
    Citation Envoyé par Claythest
    Et je passe quoi au paramètre du constructeur du TreePath ? null ?

    ... ce qui me génèrera l'erreur de la même façon...
    Oui, null et non çà ne génèrera pas la même erreur: le constructeur avec Object[] se contente d'appeler le constructeur avec TreePath en lui passant new TreePath(Object[]). C'est ce new TreePath() qui génère l'exception, mais avec le deuxième constructeur il ne sera plus appelé.
    Tu auras peut-être une autre erreur, à tester.

  7. #7
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Citation Envoyé par NicoV
    Oui, null et non çà ne génèrera pas la même erreur: le constructeur avec Object[] se contente d'appeler le constructeur avec TreePath en lui passant new TreePath(Object[]). C'est ce new TreePath() qui génère l'exception, mais avec le deuxième constructeur il ne sera plus appelé.
    Tu auras peut-être une autre erreur, à tester.
    Alors, si j'ai bien compris ce que tu me dis c'est que au lieu de faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new TreeModelEvent(this, (Object[])null, null, maRacineModifiée);
    Je devrais faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TreePath tp = new TreePath((Object[])null);
    new TreeModelEvent(this, tp, null, maRacineModifiée);
    C'est ça ?

    Ce qui fait que au lieu de me prendre l'exception par l'appel au constructeur de TreePath dans le constructeur de TreeModelEvent, je me la prends dans mon code, lors de mon appel au constructeur TreePath ?

    Je n'en vois pas l'intérêt... Quelque chose qui m'échappe...

    Quoiqu'il en soit, le problème n'est plus là. Je sais comment signifier un évènement de modification ou d'ajout de la racine, mais pas de suppression...

    Si quelqu'un le sait, merci de me le communiquer

Discussions similaires

  1. [Tomcat] configuration d'une page d'erreur dans web.xml
    Par Super Castor dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 08/04/2009, 15h58
  2. [Thread] Erreur dans une classe interne
    Par totof2308 dans le forum Général Java
    Réponses: 5
    Dernier message: 03/06/2004, 08h15
  3. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59
  4. [Erreur dans la lib...]
    Par Gonath dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/12/2003, 09h02
  5. Erreur dans l'utilisation de SWAP
    Par mire dans le forum Langage
    Réponses: 12
    Dernier message: 15/03/2003, 21h39

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