tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Franz Degenhardt
  • 1 Beitrag von HonniCilest
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
168
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Devilness Devilness ist offline Mitglied
    Registriert seit
    Jul 2011
    Beiträge
    11
    Hallo,

    ich habe (mal wieder) ein kleines Problem. Ich versuche aus einem Unterordner die Namen von .xml-Dateien in ein Array zu packen und diese dann in einem Dropdown-Menü (bzw. ein JComboBox) ausgeben zu lassen.

    Das eigentliche Problem: In diesem besagten Unterordner liegen schon zwei Dateien diesen Typs, aber Java findet sie nicht. Das Merkwürdige ist, dass das fast identische Prozedere mit .csv-Dateien funktioniert...

    Hier mal der Quellcode für die .xml-Dateien:
    Code :
    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
    
        public void createLoadFrame(Container pane){        // Erstellt eine neuen NewFrame
            pane.setLayout(null);
            
            // Die Buttons
            okay = new JButton("Okay");
            cancel = new JButton("Abbruch");
     
            pane.add(okay);
            pane.add(cancel);
     
            Insets insets = pane.getInsets();
            Dimension size = okay.getPreferredSize();
            okay.setBounds(75 + insets.left, 125 + insets.top,
                           size.width, size.height);
            okay.addActionListener(this);
            okay.setActionCommand("loadkay");
            size = cancel.getPreferredSize();
            cancel.setBounds(150 + insets.left, 125 + insets.top,
                             size.width, size.height);
            cancel.addActionListener(this);
            cancel.setActionCommand("can");
            
            // Dropdown für Quelldateien
            File userdir = new File("./XML");
            ArrayList<String> files = new ArrayList<String>();
            
            for (String entry : userdir.list(new TxtFilenameFilter())) {
                files.add(entry);
            }
            System.out.println("Anzahl der gefundenen Dateien " + files.size());
            
            int fSize = files.size();
            
            String[] fileArray = new String[fSize];
            for(int i = 0; i < fSize; i++) {
                fileArray[i] = files.get(i);
                System.out.println(i + ": " + fileArray[i]);
            }
            comboVar = fileArray[0];
            
            listXML = new JComboBox(fileArray);
            pane.add(listXML);
            listXML.setSelectedIndex(0);
            size = listXML.getPreferredSize();
            listXML.setBounds(25 + insets.left, 25 + insets.top,
                                size.width, size.height);
            listXML.addActionListener(this);
            listXML.setActionCommand("combo");
            
            System.out.println("Creating loading frame... done!");
        }

    Es handelt sich hierbei um eine ArrayIndexOutOfBoundsException. Zum vergleich mal der funktionierende Code für .csv-Dateien:
    Code :
    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
    
    public void createNewFrame(Container pane){     // Erstellt eine neuen NewFrame
            pane.setLayout(null);
            
            // Die Buttons
            okay = new JButton("Okay");
            cancel = new JButton("Abbruch");
     
            pane.add(okay);
            pane.add(cancel);
     
            Insets insets = pane.getInsets();
            Dimension size = okay.getPreferredSize();
            okay.setBounds(75 + insets.left, 125 + insets.top,
                           size.width, size.height);
            okay.addActionListener(this);
            okay.setActionCommand("newkay");
            size = cancel.getPreferredSize();
            cancel.setBounds(150 + insets.left, 125 + insets.top,
                             size.width, size.height);
            cancel.addActionListener(this);
            cancel.setActionCommand("can");
            
            // Dropdown für Quelldateien
            File userdir = new File("./CSV");
            ArrayList<String> files = new ArrayList<String>();
            
            for (String entry : userdir.list(new TxtFilenameFilter())) {
                files.add(entry);
            }
            System.out.println(files.size());
            
            int fSize = files.size();
            
            String[] fileArray = new String[fSize];
            for(int i = 0; i < fSize; i++) {
                fileArray[i] = files.get(i);
                System.out.println(i + ": " + fileArray[i]);
            }
            comboVar = fileArray[0];
            
            listFiles = new JComboBox(fileArray);
            pane.add(listFiles);
            listFiles.setSelectedIndex(0);
            size = listFiles.getPreferredSize();
            listFiles.setBounds(25 + insets.left, 25 + insets.top,
                                size.width, size.height);
            listFiles.addActionListener(this);
            listFiles.setActionCommand("combo");
            
            // Feld für Dateinamen der Zieldatei eingeben
            input = new JTextField(2);
            pane.add(input);
            input.setBounds(25 + insets.left, 75 + insets.top, 100, 25);
            
            System.out.println("Creating new frame... done!");
        }

    Ich wär über jede Hilfe sehr froh

    Gruß Devilness
     

  2. #2
    Avatar von Franz Degenhardt
    Franz Degenhardt Franz Degenhardt ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Ort
    Köln
    Beiträge
    378
    Hi,

    könnte es sein, dass dein TxtFilenameFilter die xml-Dateien rausfiltert?
     
    Denken gefärdet die Gewohnheit

  3. #3
    Avatar von HonniCilest
    HonniCilest HonniCilest ist offline Mitglied Platin
    Registriert seit
    Jun 2009
    Ort
    Java Insel
    Beiträge
    501
    Ich glaube kaum, dass ein TxtFileNameFilter xml-Dateien findet, eigentlich schon merkwürdig, dass er angeblich csv-Dateien findet, denn laut Spezifikation lässt er wirklich nur txt-Dateien zu... Ich schätze der Fehler tritt hier auf: comboVar = fileArray[0], ohne gefundenen Wert gibt es nicht mal diesen Eintrag.

    Aber davon mal abgesehen, habe ich das Gefühl, du läufst auf dem Weg auf die andere Straßenseite noch 3x um den Block. Nur mal zum Verständnis... Du holst dir ein String-Array der gefundenen Dateien, schreibst diese Eintrag für Eintrag in eine ArrayList, um diese dann Eintrag für Eintrag wieder in ein String-Array zu schreiben, welche die ComboBox schließlich als Argument bekommt. Also warum zur Hölle schreibst du nicht:
    Code java:
    1
    
    listFiles = new JComboBox(userdir.list(new TxtFilenameFilter())); //hab den Filter einfach mal stur übernommen
    Für deine comboVar (wofür die auch immer stehen mag) kannst du dann immernoch schreiben:
    Code java:
    1
    2
    
    if(listFiles.getItemCount() > 0) comboVar = (String)listFiles.getItemAt(0);
    else //falls Liste keine Einträge enthält...
     
    Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
    ...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.

  4. #4
    Avatar von Franz Degenhardt
    Franz Degenhardt Franz Degenhardt ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Ort
    Köln
    Beiträge
    378
    Zitat Zitat von HonniCilest Beitrag anzeigen
    Ich glaube kaum, dass ein TxtFileNameFilter xml-Dateien findet, eigentlich schon merkwürdig, dass er angeblich csv-Dateien findet, denn laut Spezifikation lässt er wirklich nur txt-Dateien zu
    Ja, gehört auch nicht zum standard java. Im Netz geistern aber viele Implementationen rum wie
    Code java:
    1
    2
    3
    4
    5
    6
    
    public class TxtFilenameFilter implements FilenameFilter {
      @Override public boolean accept( File f, String s ) {
        return new File(f, s).isFile() &&
               s.toLowerCase().endsWith( ".txt" );
      }
    }
    Entweder die csv-Dateien liegen mit der Endung txt vor oder die Implementierung wurde kurzerhand auf .csv umgebogen.
    Devilness bedankt sich. 
    Denken gefärdet die Gewohnheit

  5. #5
    Avatar von HonniCilest
    HonniCilest HonniCilest ist offline Mitglied Platin
    Registriert seit
    Jun 2009
    Ort
    Java Insel
    Beiträge
    501
    Öhm ja das würde es natürlich erklären Aber damit hätten wir ja gleich ein Beispiel, wie sich Devilness selbst einen Filter bauen könnte...
    Devilness bedankt sich. 
    Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
    ...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.

  6. #6
    Devilness Devilness ist offline Mitglied
    Registriert seit
    Jul 2011
    Beiträge
    11
    Hallo und danke, dass ihr so schnell darauf geantwortet habt. Ich hab den Wald vor lauter Bäumen nicht gesehen -.- Natürlich liegts am txtFileFilter, so einen hab ich nämlich schon, aber halt für .csv-Dateien. Ich hab nämlich genau das, was Franz gepostet, hat selbst schon gefunden. Und eben an diesem Filter wirds gelegen haben. Ich werd das gleich mal korrigieren bzw neu schreiben. Und danke HonniCilest für die Tipps, ich werd das mal übernehmen
     

  7. #7
    Avatar von HonniCilest
    HonniCilest HonniCilest ist offline Mitglied Platin
    Registriert seit
    Jun 2009
    Ort
    Java Insel
    Beiträge
    501
    Mal noch am Rande erwähnt, was genau hast du vor? Lediglich einen Dialog zum Öffnen von Dateien?
    Wenn ja, dann schau doch auch ma hier:
    http://download.oracle.com/javase/1....leChooser.html
     
    Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
    ...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.

  8. #8
    Devilness Devilness ist offline Mitglied
    Registriert seit
    Jul 2011
    Beiträge
    11
    Ich möchte keinen Dialog. Ich will, dass nur Dateien eines bestimmten Datentyps, also z.B. .xml, in einem Dropdown-Menü erscheinen, wovon man sich eine Datei aussuchen soll. Der JFileChooser ist zwar ganz interessant, aber für meine Zwecke weniger geeignet, da er die Sache etwas verkomplizieren würde. Trotzdem Danke
     

Ähnliche Themen

  1. Treiber werden nicht gefunden
    Von Peter Klein im Forum Microsoft Windows
    Antworten: 4
    Letzter Beitrag: 29.01.09, 15:00
  2. Die Webseite kann nicht gefunden werden
    Von Meier22 im Forum Internet, DSL & Flatrate
    Antworten: 14
    Letzter Beitrag: 14.09.08, 00:26
  3. Antworten: 0
    Letzter Beitrag: 12.03.05, 11:51
  4. Antworten: 1
    Letzter Beitrag: 07.11.04, 17:35
  5. Netzwerke werden nicht gefunden
    Von fdelay im Forum Netzwerke
    Antworten: 2
    Letzter Beitrag: 30.12.03, 10:18

Stichworte