Moin Moin!
Ich lese die Dateien eines Verzeichnises aus. Nach dem Auslesen werden diese Dateien in einer for-Schleife verarbeitet. Dieser Vorganng ist zeitintensiv. Deshalb würde ich gerne ein JDialog anzeigen, der den Status des Vorgangs mit einer JProgressbar und einer JTextArea wiederspiegelt.
Doch wird der Inhalt des JDialog immer erst angezeigt, wenn die ganze Arbeit getan ist. Oder wenn ich den Dialog modal setze (was eigentlich auch richtig wäre), dann läuft die Schleife nicht mehr ab.
Was könnte ich da tun? Threads?
Ich lese die Dateien eines Verzeichnises aus. Nach dem Auslesen werden diese Dateien in einer for-Schleife verarbeitet. Dieser Vorganng ist zeitintensiv. Deshalb würde ich gerne ein JDialog anzeigen, der den Status des Vorgangs mit einer JProgressbar und einer JTextArea wiederspiegelt.
Doch wird der Inhalt des JDialog immer erst angezeigt, wenn die ganze Arbeit getan ist. Oder wenn ich den Dialog modal setze (was eigentlich auch richtig wäre), dann läuft die Schleife nicht mehr ab.
Was könnte ich da tun? Threads?
Java:
public void readDirectory(String path) {
File dir = new File(path);
File[] files = dir.listFiles();
// Dialog
final JDialog dialog = new JDialog((JFrame)null, "Loading ...");
// dialog.setModal(true);
// Dialog - Label & ProgressBar
JProgressBar pb = new JProgressBar(1, files.length);
pb.setPreferredSize(new Dimension(175,20));
pb.setString("Working");
pb.setStringPainted(true);
pb.setValue(1);
JLabel label = new JLabel("Progress: ");
JPanel northPanel = new JPanel();
northPanel.add(label);
northPanel.add(pb);
dialog.getContentPane().add(northPanel, BorderLayout.NORTH);
// Dialog - TextArea
JTextArea ta = new JTextArea(10, 20);
JPanel centerPanel = new JPanel();
centerPanel.add(new JScrollPane(ta));
dialog.getContentPane().add(centerPanel, BorderLayout.CENTER);
// Dialog - Button
JButton button = new JButton("Done");
button.setActionCommand("done");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
if ( evt.getActionCommand().equals("done") ) {
dialog.dispose();
}
}
});
JPanel southPanel = new JPanel();
southPanel.add(button);
dialog.getContentPane().add(southPanel, BorderLayout.SOUTH);
// Dialog - Anzeige
dialog.pack();
dialog.setLocationRelativeTo(null);
dialog.setVisible(true);
dialog.toFront();
// Logik
if (files != null) {
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
int id = Integer.parseInt(files[i].getName().substring(0, files[i].getName().indexOf('.')));
// Verarbeitung der Dateien die Zeit braucht steht eigentlich hier
pb.setValue(i+1);
ta.append((i + 1) + " -> " + Integer.toString(id) + "\r\n");
}
}
}
}