alle Ordner in einem Ordner anzeigen(Jlist)

JDE4D

Mitglied
Java:
    private void ChsDictActionPerformed(java.awt.event.ActionEvent evt) {                                        
        String filename = File.separator + "tmp";
        JFrame frame = null;
        JFileChooser fc = new JFileChooser(new File(filename));
        fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        int returnVal = fc.showOpenDialog(frame);
        File selFile = fc.getSelectedFile();

        String loctxt = selFile.getPath();
        JLabel test = new JLabel();
        File SubjDirs = new File(loctxt);
        String[] SubjDirsList = SubjDirs.list();
        jList1 = new JList();

        if (returnVal == JFileChooser.APPROVE_OPTION) {
            CurrLoc.setText(loctxt);
//            
            DefaultListModel model = new DefaultListModel();
            jList1.setModel(model);
            jList1.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
            jList1.setLayoutOrientation(JList.HORIZONTAL_WRAP);
            jList1.setVisibleRowCount(-1);
            JScrollPane listscr = new JScrollPane(jList1);
            listscr.setPreferredSize(new Dimension(238, 168));

            for (String txtloc : SubjDirsList) {
                model.addElement(txtloc);
//                jList1.add(listscr);
            }
        }
}

ich habe hier ein MenüItem das einen FileChooser aufruft. Beim Bestätigen des FC soll ein textfeld mit dem Pfad gefüllt werden (als text - klappt auch).

problem ist jetzt, dass ich es i-wie hinbekommen will das er in diesem Pfad wo nur ordner existieren, in einer JList ausgibt. Das heisst die Namen der Ordner sollen in der JList stehen. Möglich?


PS: Es gibt ein ähnlichen Thread aber bin nicht schlau raus geworden.

LG,

dead
 
problem ist jetzt, dass ich es i-wie hinbekommen will das er in diesem Pfad wo nur ordner existieren, in einer JList ausgibt. Das heisst die Namen der Ordner sollen in der JList stehen. Möglich?

Im FileChooser oder irgendwo anders im Programm? Mit File#listFiles bekommst du alle Dateien und Ordner in dem Verzeichnis.
 
Java:
File[] dateienImVerzeichnis = deinFileChooser.getSelectedFile().listFiles();

Alles klar? 🙂
 
Du läufst das Array dann in einer Schleife durch und fügst in dieser Schleife jedes File in dem Array deiner JList hinzu.
 
Java:
    private void ChsDictActionPerformed(java.awt.event.ActionEvent evt) {                                        
        String filename = File.separator + "tmp";
        JFrame frame = null;
        JFileChooser fc = new JFileChooser(new File(filename));
        fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        int returnVal = fc.showOpenDialog(frame);
        File selFile = fc.getSelectedFile();

        String loctxt = selFile.getPath();
        File SubjDirs = new File(loctxt);
        String[] SubjDirsList = SubjDirs.list();
        JScrollPane listscr = new JScrollPane();
        DefaultListModel model = new DefaultListModel();

        if (returnVal == JFileChooser.APPROVE_OPTION) {
            CurrLoc.setText(loctxt);
 
            jList1.setModel(model);
            jList1.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
            jList1.setVisibleRowCount(-1);
            listscr.setPreferredSize(new Dimension(238, 168));

            for (String txtloc : SubjDirsList) {
                model.addElement(txtloc);

            }


            validate();
            repaint();

        }

    }

so klappts...

leider zeigt er alles an und nicht nur die ordner...
 
Arbeite statt mit File#list mit File#listFiles, dann bekommst du anstelle der Namen File-Objekte. Und daran gibt es die Methode isDirectory, die dir hier sicher hilft...
 
Java:
        File[] SubjDirsList = SubjDirs.listFiles(); /* !!! */
        JScrollPane listscr = new JScrollPane();
        DefaultListModel model = new DefaultListModel();
 
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            CurrLoc.setText(loctxt);
 
            jList1.setModel(model);
            jList1.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
            jList1.setVisibleRowCount(-1);
            listscr.setPreferredSize(new Dimension(238, 168));
 
            for (File txtloc : SubjDirsList) { /* !!! */
                if (txtloc.isDirectory()) model.addElement(txtloc.getName());  /* !!! */
 
            }
 
für solche probleme hat sich bei mir anfangs eine ordentliche entwicklungsumgebung sehr bewährt.
programme wie netbeans oder eclipse zeigen dir auf knopfdruck alle methoden einer klasse und geben auch sofort daneben eine kurzbeschreibung an, dadurch findet man sehr schnell nötige funktionen.
außerdem werden tippfehler bereits beim tippen angezeigt oder korrigiert, so sieht man alle fehler auf einmal und muss nicht mühsam jeden einzelnen compilefehler durchgehen.
 
erstmal möchte ich Murray danken ! Alles perfekt.

Mich würde noch etwas interessieren:
1. Ich habe eine scrollbar hinzugefügt aber sie6 erscheint nicht, wenn zuviele in der liste sind.
2. Ist es möglich das wenn ich auf ein button klicke er mir eine .exe datei startet die im ausgewählten ordner(JList) sich befindet?

@nixnick: Ich use netbeans..
 
da bin ich wieder...

Ich glaube ihr müsst mir was erklären.

In meiner JList habe ich ja die models.. Diese sind ja ordner..

In meinem fall, existiert in jedem Model/Ordner EINE .exe datei..

Kann ich wenn ich in der liste mein ordner auswähle, die .exe starten die sich im ordner befindet?
 
Du holst dir das File oder den String (je nach dem wie du es in der JList speicherst) wieder aus der JList. Falls noch nicht geschehen, wandelst du das Objekt wieder in ein File-Objekt um, das auf den Ordner verweist. Mit File#listFiles kannst du wiederum alle Dateien in dem Ordner auslesen. Dort überprüfst du dann, welche Datei mit .exe endet und führst die dann über die Runtime aus.
 
da sollte dir das weiterhelfen
Java:
list.getSelectedValue().toString()

Wenn du das File allerdings direkt in die JList wirfst, reicht auch ein

Java:
File f = (File)list.getSelectedValue();

Ansonsten müsstest du den File-String wieder in ein File umwandeln, was irgendwie schwachsinnig wäre ;-) .
 
Java:
Antwort         	
    private void StartclientButtActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        String run = jList1.getSelectedValue().toString();
        File go2 = new File(run);
        File[] go = go2.listFiles();


        for (File txtloc : go) {
            if (txtloc.getName().endsWith(".exe")) {
                try {
                    Runtime.getRuntime().exec(run);
                } catch (IOException ex) {
                    Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

        }


    }

leider gibt er mir dort eine nullpointerexception...
 
1.) stimmt es muss txtloc rein, stimmts?
2.) die kommt im Try block.. Habe es mit
Java:
´    private void StartclientButtActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        String run = jList1.getSelectedValue().toString();
        File go2 = new File(run);
        File[] go = go2.listFiles();


        for (File txtloc : go) {
            if (txtloc.getName().endsWith(".exe")) {
                try {
                    Runtime.getRuntime().exec(txtloc.toString());  // Exception in thread 
                } catch (IOException ex) {
                    //Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

...versucht aber kommt wieder die exception..
 
Im catch-Block? Kann nicht sein! Da ist ja gar kein Code drin 😛

Und wie lautet die Fehlermeldung überhaupt genau?

Versuchs mal so

Java:
Runtime.getRuntime().exec("cmd /c " + txtloc.toString());
 
ich hab im try block gesagt... habe es mit dein vorschlag probiert, ohne erfolg.

das spuckt netbeans aus:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at sbotapp.NewJFrame.StartclientButtActionPerformed(NewJFrame.java:332)
at sbotapp.NewJFrame.access$100(NewJFrame.java:32)
at sbotapp.NewJFrame$2.actionPerformed(NewJFrame.java:100)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
 
Ups, sorry, verlesen.

Und der Fehler verweist auch wirklich auf Runtime.getRuntime.exec()? Ich wüsste nicht, was hier null sein soll. Überprüfe doch mal, ob txtloc != null ist.
 
Warum versuchst du das öffnen nicht mal damit:
Java:
if(Desktop.isDesktopSupported()){
   Desktop.getDesktop().open(file);
}
 
Java:
    private void StartclientButtActionPerformed(java.awt.event.ActionEvent evt) {                                                
        // TODO add your handling code here:
        String run = jList1.getSelectedValue().toString();
        File go2 = new File(run);
        File[] go = go2.listFiles();


        for (File txtloc : go) {
            if(Desktop.isDesktopSupported()){
                try {
                    Desktop.getDesktop().open(txtloc);
                } catch (IOException ex) {
                    Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            }

        


    }

klappt immer noch nicht.. immer noch die gleiche exception 🙁

Ich verzweifle langsam..
 
Möglicherweise ist go null, weil go2 kein Directory ist. Das sieht man alles recht gut im Debugger; ersatzweise könntest du aber auch System.out.println()-Statements einfügen

Java:
    private void StartclientButtActionPerformed(java.awt.event.ActionEvent evt) {                                                
        // TODO add your handling code here:
        String run = jList1.getSelectedValue().toString();
        System.out.println( "run=" + run);
        File go2 = new File(run);
        System.out.println( "go2=" + go2);
        System.out.println( "go2.AbsPath=" + go2.getAbsolutePath());
        System.out.println( "go2.Dir=" + go2.isDirectory);
        File[] go = go2.listFiles();
 
Zuletzt bearbeitet:
run=Cosma
go2=Cosma
go2.AbsPath=G:\Users\Sa\Documents\NetBeansProjects\SBotApp\Cosma
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
go2.Dir=false

Das hat er mir rausgespuckt..
 
Die Reihen folge der Ausgaben ist seltsam, aber den entscheidenden Punkt sieht man ja: go2 ist kein Directory, daher liefert listFiles null. Wenn man dann in der for-Schleife über go iteriert, muss es knallen.
 
wo setzt ich das hin?
Java:
        String run = jList1.getSelectedValue().toString();
        System.out.println( "run=" + run);
        File go2 = new File(run);
        System.out.println( "go2=" + go2);
        System.out.println( "go2.AbsPath=" + go2.getAbsolutePath());
        System.out.println( "go2.Dir=" + go2.isDirectory());

        File[] go = go2.listFiles();


        for (File txtloc : go) {
            if (txtloc.getName().endsWith(".exe")) {
                try {
                    Runtime.getRuntime().exec("cmd /c " + txtloc.toString());
                } catch (IOException ex) {
                    //Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

        }
 
wo setzt ich das hin?
Java:
        String run = jList1.getSelectedValue().toString();
        System.out.println( "run=" + run);
        File go2 = new File(run);
        System.out.println( "go2=" + go2);
        System.out.println( "go2.AbsPath=" + go2.getAbsolutePath());
        System.out.println( "go2.Dir=" + go2.isDirectory());

        File[] go = go2.listFiles();


        for (File txtloc : go) {
            if (txtloc.getName().endsWith(".exe")) {
                try {
                    Runtime.getRuntime().exec("cmd /c " + txtloc.toString());
                } catch (IOException ex) {
                    //Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

        }
kann mir keiner helfen?
 
Was willst du irgendwo hinsetzen? Das Problem steckt doch offenbar im Befüllen der Liste, weil - wie schon beschrieben - der selektierte Eintrag kein Ordner ist, aber als solcher behandelt wird.

Was willst Du genau erreichen? Sollen in der JList jetzt Ordner oder Exen stehen?
 
Das willl ich:

Wenn ich auf den Button klicke, soll er im ausgewählten ordner (den ich in der JListe ausgewählt habe..) nach exe dateien suchen(im ordner is immer eine drin, aber mit immer anderen namen) und die dann starten...
 
hab das jetz mit ein azubi so gelöst:

Java:
    private void StartclientButtActionPerformed(java.awt.event.ActionEvent evt) {                                                
        // TODO add your handling code here:
        String run = jList1.getSelectedValue().toString();
        String run2 = CurrLoc.getText();
        String slash = "\\";
        String runf = run2 + slash + run;
        System.out.println(run2 + "\\" +  run);
        File go2 = new File(runf);
        System.out.println( "go2=" + go2);
        System.out.println( "go2.AbsPath=" + go2.getAbsolutePath());
        System.out.println( "go2.Dir=" + go2.isDirectory());

        File[] go = go2.listFiles();


        for (File txtloc : go) {
            if (txtloc.getName().endsWith(".exe")) {
                try {
                    System.out.println(txtloc.toString());
                    Runtime.getRuntime().exec("cmd /c \"" + txtloc.toString() + "\"");
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }

        }


    }
 

Zurück
Oben