Hallo,
ich habe ein Problem mit einem Programm, das aus einer JList besteht, die alle Dateien eines Verzeichnisses ausgeben soll.
Die Klasse heißt sogar lustigerweise noch FUNKTIONIERT, weil die nextDirectory()-Methode, die erste war, die ich selbst geschrieben habe und ich mich damals sehr gefreut habe, dass sie mit System.out.println(list) läuft. Die Ausgabe dauert so allerdings bis zu 15 Minuten (ggf. heap size vergrößern).
Das Problem mit dem Programm in dieser Form ist, dass es sich aufhängt und ich weiß nicht warum. Ich vermute, dass die nextDirectory-Methode auch irgendwie in einem Thread laufen muss, oder das zumindest besser ist und die zwei Threads dann mit einander kommunizieren.
Ich bin für alle Vorschläge, seien sie auch nur Ansätze, dankbar.
Mfg
ich habe ein Problem mit einem Programm, das aus einer JList besteht, die alle Dateien eines Verzeichnisses ausgeben soll.
Code:
//mit NetBeans 6.5 GUI Designer erstellt
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.ListModel.*;
import javax.swing.event.ListDataEvent;
public class FUNKTIONIERT extends javax.swing.JFrame{
//falls alles durchsucht werden soll, können die Roots über eine Schleife
//durchlaufen werden
static File directory = new File("C:\\"); //man kann beliebiges Verzeichnis nehmen
static File[] roots = directory.listRoots();
static LinkedList list = new LinkedList();
static DefaultListModel sampleModel = new DefaultListModel();
//unwichtig
//ListDataListener hat keine Adapter-Klasse
/*javax.swing.event.ListDataListener listDataListener = new javax.swing.event.ListDataListener() {
public void intervalAdded(ListDataEvent e) {
//ohne revalidate() hängt sich das Programm auch auf
jList1.revalidate();
}
public void intervalRemoved(ListDataEvent e) {
jList1.revalidate();
throw new UnsupportedOperationException("Not supported yet.");
}
public void contentsChanged(ListDataEvent e) {
jList1.revalidate();
throw new UnsupportedOperationException("Not supported yet.");
}
};*/
//wieder wichtig
public static void nextDirectory(String directory) throws NullPointerException,ArrayIndexOutOfBoundsException {
File firstDirectory = new File(directory);
File[] firstDirectoryArray = firstDirectory.listFiles();
for(int a = 0; a < firstDirectoryArray.length; a++){
//Idee: nextDirectory() in einem eigenen Thread laufen lassen und mit
//dem JFrame kommunizieren lassen
sampleModel.addElement(firstDirectoryArray[a].toString());
//LinkedList zur Kontrolle der Methode nextDirectory(String directory)
//list.add(firstDirectoryArray[a].toString());
if(firstDirectoryArray[a].isDirectory() && firstDirectoryArray[a].list() != null){
nextDirectory(firstDirectoryArray[a].toString());
}
}
}
//Erzeugung der GUI-Oberfläche durch NetBeans (unwichtig)
public FUNKTIONIERT() {
initComponents();
}
@SuppressWarnings("unchecked")
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
//sampleModel.addListDataListener(listDataListener);
jList1 = new javax.swing.JList();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
jList1.setModel(sampleModel);
jList1.setDoubleBuffered(true);
jScrollPane1.setViewportView(jList1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 421, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 257, Short.MAX_VALUE)
);
pack();
}
//wieder wichtig
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new FUNKTIONIERT().setVisible(true);
}
});
nextDirectory("C:\\Users");
for(int i = 0; i < roots.length; i++){
nextDirectory(roots[i].toString());
}
System.out.println(sampleModel.size()); //zur Überprüfung
}
// Variables declaration - do not modify
public static javax.swing.JList jList1;
public static javax.swing.JScrollPane jScrollPane1;
// End of variables declaration
}
Die Klasse heißt sogar lustigerweise noch FUNKTIONIERT, weil die nextDirectory()-Methode, die erste war, die ich selbst geschrieben habe und ich mich damals sehr gefreut habe, dass sie mit System.out.println(list) läuft. Die Ausgabe dauert so allerdings bis zu 15 Minuten (ggf. heap size vergrößern).
Das Problem mit dem Programm in dieser Form ist, dass es sich aufhängt und ich weiß nicht warum. Ich vermute, dass die nextDirectory-Methode auch irgendwie in einem Thread laufen muss, oder das zumindest besser ist und die zwei Threads dann mit einander kommunizieren.
Ich bin für alle Vorschläge, seien sie auch nur Ansätze, dankbar.
Mfg