Hallo Forum,
ich habe eine Methode, die Ordner durchsucht.
Die kann ich mit setIndeterminate() so setzen, dass sie dann diesen blau laufenden Balken anzeigt. Denn ich weiß leider (aufgrund einer Rekursion) nicht, wie ich den Fortschrittberechnen soll. Darum soll einfach nur der Balken da drinne hin und her laufen.
Ich habe es auf zwei Weisen versucht:
Ich habe ein Fenster, zeige da die Bar und ein JLabel. Dann rufe ich die Methode auf, damit sie sucht, nach der Methode wird das Fenster geschlossen. Problem: Es tut sich nichts.
Also wollte ich es mit einem Thread machen, der halt während der Suche die ProgressBar anzeigt und danach beendet.
Dann funktioniert die ProgressBar, blöd ist aber, dass sie erst dann angezeigt wird, sobald die Methode listDir() fertig ist! Das Frame ist schon vorher da. Die ProgressBar und das Label werden erst angezeigt, nachdem die Methode durch ist. Und da ich direkt nach dem Ende der Methode die Variable Search auf false setze, wird das Fenster geschlossen. Dass die ProgressBar läuft, sehe ich nur, wenn ich search gar nicht auf false setze.
Was mache ich verkehrt?
Lg
MasseElch
ich habe eine Methode, die Ordner durchsucht.
Die kann ich mit setIndeterminate() so setzen, dass sie dann diesen blau laufenden Balken anzeigt. Denn ich weiß leider (aufgrund einer Rekursion) nicht, wie ich den Fortschrittberechnen soll. Darum soll einfach nur der Balken da drinne hin und her laufen.
Ich habe es auf zwei Weisen versucht:
Ich habe ein Fenster, zeige da die Bar und ein JLabel. Dann rufe ich die Methode auf, damit sie sucht, nach der Methode wird das Fenster geschlossen. Problem: Es tut sich nichts.
Java:
//Show the ProgressBar while searching
JFrame frame = new JFrame("Es wird gesucht");
frame.pack();
frame.setVisible(true);
frame.setAlwaysOnTop(true);
JProgressBar pBar = new JProgressBar();
pBar.setIndeterminate(true);
frame.add(new JLabel("Suche läuft..."));
frame.add(pBar);
frame.setLayout(new GridLayout(2,1));
frame.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/2, screenHeight/2);
frame.setSize(230, 75);
//search the files
this.listDir(dir);
//close Progressbar
frame.dispose();
Also wollte ich es mit einem Thread machen, der halt während der Suche die ProgressBar anzeigt und danach beendet.
Java:
class ShowProgressBar implements Runnable {
public void run() {
JFrame frame = new JFrame("Es wird gesucht");
frame.setLayout(new GridLayout(2,1));
frame.pack();
frame.setVisible(true);
frame.setAlwaysOnTop(true);
frame.add(new JLabel("Suche läuft..."));
JProgressBar pBar = new JProgressBar();
frame.add(pBar);
pBar.setIndeterminate(true);
frame.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/2, screenHeight/2);
frame.setSize(230, 75);
while(search) {}
frame.dispose();
}
}
Java:
//new Thread
Thread t = new Thread(new ShowProgressBar());
t.start();
this.search = false;
this.listDir(dir);
Dann funktioniert die ProgressBar, blöd ist aber, dass sie erst dann angezeigt wird, sobald die Methode listDir() fertig ist! Das Frame ist schon vorher da. Die ProgressBar und das Label werden erst angezeigt, nachdem die Methode durch ist. Und da ich direkt nach dem Ende der Methode die Variable Search auf false setze, wird das Fenster geschlossen. Dass die ProgressBar läuft, sehe ich nur, wenn ich search gar nicht auf false setze.
Was mache ich verkehrt?
Lg
MasseElch