Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich brauche eine jProgressBar die mit einer while schleife funktioniert.
Sie soll den Fortschritt anzeigen beim Kopieren einer Datei.
Hier der Code den ich versucht habe:
Ich weiß ja nicht was bei dir kopierteDatei ist und was zuKopierende Datei ist. Aber bei mir funktioniert folgendes programm problemlos. Zum Ausprobieren lediglich 2 Dateinamen eingeben.
Code:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
public class Fenster extends JFrame {
private final String DATEINAME_ORIGINAL="";
private final String DATEINAME_KOPIE="";
JProgressBar probar;
public Fenster() throws IOException{
this.setSize(400, 300);
probar = new JProgressBar();
probar.setStringPainted(true);
this.add(probar);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.doAction();
}
private void doAction() throws IOException {
File zuKopierendeDatei = new File(DATEINAME_ORIGINAL);
BufferedReader reader = new BufferedReader(new FileReader(zuKopierendeDatei));
this.probar.setMaximum((int) zuKopierendeDatei.length());
File kopierteDatei = new File(DATEINAME_KOPIE);
FileWriter writer = new FileWriter(kopierteDatei);
while (reader.ready()) {
writer.write(reader.read());
probar.setValue((int) kopierteDatei.length());
}
writer.close();
}
public static void main(String[] args) {
try {
Fenster fenster = new Fenster();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Danke das geht jetzt, vorher habe ich das mit zwei RandomAccessFiles gemacht.
Allerdings springt der nun immer von 0% auf zum Beispiel 78% und hängt dann, was heißt dass die Datei weder weiterkopiert wird, noch erhöt sich der Wer der ProgressBar.
ein biserl mehr code könnte es schon sein.
Wird die Datei komplett kopiert?
Wie groß sind die Dateien?
Das es Sprünge (o% dann 78%) gibt ist normal.
Für die Gui wird ein neuer Thread gestartet, wenn sich jetzt etwas an der Gui sprich JProgressbar etwas ändert, wird das erst aktualisiert, wenn der Thread für die Gui drankommt. Und dann kann es sein das der Kopiervorgang schon etwas weiter fortgeschritten ist. Bei großen Dateien 1MB z.B. da sieht man dann schon etwas mehr, als nur bei 1kb.
Im angegebenen Code-Schnipsel wird auch kein aktueller Wert an die ProgressBar weitergegeben.
Der Fehler mit dem Datei kopieren war meiner, ich habe ein "/" vergessen. Nun werden die Datein komplett und fehlerfrei kopiert.
Also ich habe das mit 3 "verschidenen" größen probiert, eine Datei mit 6KB, mit 3MB und 101MB.
Immer das gleiche, immer alles funktioniert mit Datei kopieren, die ProgressBar wurde allerdings erst gesetzt wenn die Datei fertig kopiert wurde. Dann wieder auf 89% oder änliches.
Der Fehler mit dem Datei kopieren war meiner, ich habe ein "/" vergessen. Nun werden die Datein komplett und fehlerfrei kopiert.
Also ich habe das mit 3 "verschidenen" größen probiert, eine Datei mit 6KB, mit 3MB und 101MB.
Immer das gleiche, immer alles funktioniert mit Datei kopieren, die ProgressBar wurde allerdings erst gesetzt wenn die Datei fertig kopiert wurde. Dann wieder auf 89% oder änliches.
Du musst das Aktualisieren deiner ProgressBar auch in einem eigenen Thread laufen lassen, sonst kommt sich die Anzeige immer mit dem Kopieren in den weg.