Java-Ladebalken-Problem

M@t

0
Hallo zusammen.

Ich bin im Moment gerade an einem kleinen Programm zur Dateverschiebung dran. Es läuft alles und jetzt bin ich noch ein bisschen an der grafischen Umsetzung dran und hier steh ich vor einem Problem. Ich will einen Ladebalken einführen der Eingermassen genau den Fortschritt anzeigen sollte. Ich frage mich nun wie ich das anstellen soll. Ich verschiebe Bild-Dateien mit dem Input+Output Stream...

Hat jemand eine Idee wie man das am besten mit der JProgressBar lösen könnte ohne eine FakeBar mit einem Vorgegebenen Wert zu starten.

Ich hoffe hier hat es auch Java-Spezialisten :thumb_up:
 
Hi,
in Java stellt Swing die JProgressBar zur Verfügung um dem Benutzer ein Fortschritts-Feedback zu geben. Du könntest den Balken z. B. nach jeder verschobenen Datei aktualisieren...

Diese Links könnten vermutlich nützlich für Dich sein:
http://www.dpunkt.de/java/Programmieren_mit_Java/Oberflaechenprogrammierung/44.html

http://download.oracle.com/javase/tutorial/uiswing/components/progress.html

Das Problem ist, ich weiss nicht wieviel Dateien vorhanden, ausser ich lasse sie zählen, was aber wieder viel Performance braucht denke ich... Aber sonst gute idee
 
M@t:
Das Problem ist, ich weiss nicht wieviel Dateien vorhanden, ausser ich lasse sie zählen, was aber wieder viel Performance braucht denke ich... Aber sonst gute idee
Du kannst die ProgressBar auch im indeterminate mode nutzen (siehe 2. Link):
Sometimes you can't immediately determine the length of a long-running task, or the task might stay stuck at the same state of completion for a long time. You can show work without measurable progress by putting the progress bar in indeterminate mode. A progress bar in indeterminate mode displays animation to indicate that work is occurring. As soon as the progress bar can display more meaningful information, you should switch it back into its default, determinate mode. In the Java look and feel, indeterminate progress bars look like this:
indprogressbar.gif
 
Na, das einmalige Abfragen der Dateigröße als Endwert kann ja wohl nicht das Problem sein, oder? Und für das Umkopieren kannst du einfach einen Puffer verwenden, über den du die bisher kopierte Datenmenge abfragen kannst.
Das langwierige beim umkopieren sind sowieso die I/O-Operationen, das bisschen Prozessorbelastung fällt da nicht ins Gewicht.
Probiers mal so:
Code:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.JProgressBar;


public class Copy {

	public static void main(String[] args) {
		
		JFrame wnd = new JFrame("Kopieren");
		wnd.setSize(300, 50);
		JProgressBar progress = new JProgressBar();
		wnd.add(progress);
		wnd.setLocationRelativeTo(null);
		wnd.setVisible(true);
		progress.setMaximum(1000);
		progress.setValue(0);
		progress.setIndeterminate(false);
		
		try {
			
			File source = new File("Demo.avi");
			long max = source.length();
			long copied = 0;
			
			BufferedInputStream strin = new BufferedInputStream(new FileInputStream("Demo.avi"));
			BufferedOutputStream strout = new BufferedOutputStream(new FileOutputStream("Destination.avi"));
			byte[] buffer = new byte[1024];
			int len;
			while((len = strin.read(buffer)) > -1) {
				strout.write(buffer, 0, len);
				
				// Progressbar
				copied += len;
				int promille = (int) (copied * 1000.0 / max);
				progress.setValue(promille);
			}
			
			strout.flush();
			strin.close();
			strout.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		wnd.dispose();
		
	}

}

mfg, metax.
 
Vielen Dank für eure Lösungen. Ich habe es schon anders gelöst, aber ähnlich wie der letzte Beitrag ;)
 
Zurück
Oben