[Java] JDOM: org.jdom.IllegalAddException

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Flyde, 4. März 2012 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 4. März 2012
    JDOM: org.jdom.IllegalAddException

    Ich hab ein kleines Problem mit einer Exception die ich nicht ganz nachvollziehen kann..

    Ich arbeite mit JDOM und lese eine config.xml aus, funktioniert alles prima.
    Ich wollte die Elemente, die ich aus der XML ziehe in eigene Datentypen packen um damit besser arbeiten zu können...

    Ausschnitt aus meiner XML-File
    HTML:
    <files>
     <dir name="Ordner/Unterordner/">
     <file name="foobar.rar" max-backups="5" />
     <file name="weitere_datei.txt" max-backups="10" />
     </dir>
     <dir name="nochEinOrdner/">
     <file name="baz.txt" max-backups="3" />
     </dir>
     <dir name="/">
     <file name="someMore.rar" max-backups="1" />
     </dir>
    </files>
    
    Bekomme aber mit nachfolgendem Code folgende Exception
    Code:
    Exception:
    Exception in thread "main" org.jdom.IllegalAddException: Filter won't allow the client.XmlElementFile 'client.XmlElementFile@569d4a90' to be added to the list
     at org.jdom.ContentList$FilterList.add(ContentList.java:569)
     at java.util.AbstractList.add(AbstractList.java:108)
     at client.XmlElementDir.<init>(Config.java:132)
     at client.Config.loadFileElements(Config.java:73)
     at client.Config.loadConfig(Config.java:52)
     at client.Config.<init>(Config.java:31)
     at client.Client.main(Client.java:26)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 0 seconds)
    
    Wichtige Codestellen sind farbig markiert!

    Hier verwende ich meine Datentypen:
    Code:
     private void loadFileElements()
     {
     List childs = eleFiles.getChildren();
     for(int i=0; i<childs.size(); i++)
     {
     Element dir = (Element)childs.get(i);
     String dirName = dir.getAttributeValue("name");
     List files = dir.getChildren();
     this.dirs.add( new XmlElementDir(dirName, files) );
     }
     }
    Ausschnitt meiner 2 Datentypen/Klassen an denen das ganze scheitert:
    Code:
    class XmlElementDir
    {
     String name = null;
     [I][B]ArrayList< XmlElementFile > files = new ArrayList<>();[/B][/I]
     
     public String getName() { return this.name; }
     public void setName(String name) { this.name = name; }
     public ArrayList< XmlElementFile > getFiles() { return this.files; }
     
     /**
     * List files, weil Element.getChildren() eine Liste zurück gibt
     */
     public XmlElementDir(String name, List files)
     {
     // Directory name
     this.setName(name);
     
     // Durch alle <file>-Elemente iterieren
     for(int i=0; i<files.size(); i++)
     {
     // File[i] (JDOM-Element)
     Element file = (Element)files.get(i);
     
     String fileName = file.getAttributeValue("name");
     int fileMaxBackups = new Integer( file.getAttributeValue("max-backups") ).intValue();
     
     // File-Objekt erzeugen
     XmlElementFile f = new XmlElementFile( fileName, fileMaxBackups );
     
     [B][COLOR="SeaGreen"]/* 
     * DEBUGAUSGABE: Alle Dateien + max-backups werden ausgegeben,
     * sofern files.add( f ); auskommentiert ist, ansonsten
     * wird nur i=0 ausgegeben und bricht durch die Exception ab
     */[/COLOR][/B]
     System.out.println("name: " + f.getName());
     System.out.println("max-backups: " + f.getMaxBackups());
     
     [COLOR="Red"][B]// Hier scheitert der Compiler[/B][/COLOR]
     [B]files.add( f );[/B] 
     }
     }
    }
    Code:
    class XmlElementFile
    {
     String name = null;
     int maxBackups = 0;
     
     public String getName() { return this.name; }
     private void setName(String name) { this.name = name; }
     
     public int getMaxBackups() { return this.maxBackups; }
     private void setMaxBackups(int maxBackups) { this.maxBackups = maxBackups; }
     
     public XmlElementFile(String name, int maxBackups)
     {
     this.setName(name);
     this.setMaxBackups(maxBackups);
     }
    }
    An sich versteh ich die Exception auch nicht
    Code:
    at org.jdom.ContentList$FilterList.add(ContentList.java:569)
    An der geschichte bin ich an diesem Punkt längst vorbei und ich arbeite mit ArrayLists

    Any ideas?
     
  2. 4. März 2012
    AW: JDOM: org.jdom.IllegalAddException

    Eventuell solltest du lokale Variablen und Klassenvariablennamen unterschiedlich bennen.

    Code:
    ArrayList< XmlElementFile > files = new ArrayList<>();
    ...
    public XmlElementDir(String name, List files)
    ...
    for(int i=0; i<files.size(); i++)
    {
    ...
    files.add( f ); // Hinzufügen zur lokalen Parameter (oder zur Membervariable)
    }
    
    -> Endlosschleife?

    PS: Ich kenn mich mit Java nicht so aus, vl ist Java auch so schlau anhand der Typen das zu unterscheiden, jedoch ist es kein guter Programmierstil.

    Mfg Rushh0ur
     
  3. 4. März 2012
    AW: JDOM: org.jdom.IllegalAddException

    nope direkt wars das nicht, indirekt schon -.-

    this.files.add( f );
    anstatt
    files.add( f );

    ist schon geiler wenn man auf klassenattribute zugreift! -.-

    Hast mich auf den richtigen riecher gebracht!

    closed
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.