Leider hilft es mir noch nicht ganz weiter. Wie kann ich einen Fortschrittsbalken erzeugen, der sich an die Methodenlaufzeit anpasst? Ist so etwas möglich? Hättet ihr vielleicht ein gutes Tutorial dazu? Ich muss eigentlich nur herausfinden, wie lange die Methode für den Aufruf benötigt oder? Kann man das einfach so herausfinden?
Ich nehme an, du hast einen Thread, der die Aufgabe erledigt?
Dann würde ich einen Listener schreiben, der immer den momentanen Wert und den Maximalwert abfeuert. Aus den kannst du dir dann ganz einfach den Prozentwert ausrechnen und der ProgressBar verpassen.
Java kann nicht vorhersehen wielang ein Methodenaufruf brauchen wird.
Das einzige was du machen kannst, ist die Laufzeit selbst abzuschätzen. Wobei das natürlich von System zu System immer unterschiedlich sein wird.
Du sagst dass deine Methode hochgeladene Dateien verarbeitet. Wenn du weißt wieviele Dateien du zu verarbeiten hast dann kannst du doch anhand der anzahl der schon verarbeiteten dateien feststellen wieweit du schon bist und die fortschrittsanzeige entsprechend anzeigne.
Du sagst dass deine Methode hochgeladene Dateien verarbeitet. Wenn du weißt wieviele Dateien du zu verarbeiten hast dann kannst du doch anhand der anzahl der schon verarbeiteten dateien feststellen wieweit du schon bist und die fortschrittsanzeige entsprechend anzeigne.
Wobei es vielleicht sinnvoll wäre, auch die Größe der Dateien miteinzubeziehen - sonst werden 99 Dateien zu je 1KB hochgeladen und der Fortschrittsbalken zeigt 99% an, bevor die letzte Datei mit 2GB hochgeladen wird. Sähe ein bisschen komisch aus.
Naja - ich habe sowas bei Rechenaufgaben immer mit 2 Threads und einer Variable gelöst. In der Variable steht immer der aktuelle Stand der Rechnungen (z.B. 70.000 von 237.000 Datensätze bearbeitet). Thread 1 macht also seine Bearbeitung (z.B. Wert in die DB schreiben - oder eben ne Datei hochladen, was ausrechnen oder was auch immer). Nach jedem Durchlauf schreibt der sein aktuelles Ergebnis in die Variable.
Der zweite Thread geht bei und setzt den Process-Bar immer nur auf den Wert der Variable... (Wenn man vorher weiss wieviele datensätze zu bearbeiten sind o.ä. kann ich ja mit SetMaximum den Wert des Processbars auf den passenden Wert setzen - und spare mir die ganze Prozent-Rechnerei....)
Bei den Dateien geht es ja ähnlich: Vorher einmal gucken welche Datei wie groß ist. Alle Dateien zusammengerechnet ergibt die MaxSize des Process-Bar (meinetwegen 421.333.222 Byte). Wenn ich jetzt weiss das ich Datei 1 mit 12.211.374 Byte übertragen habe setze ich den Wert so auf die Processbar. Schon brauche ich keine Prozentrechnung machen - und meine Anzeige passt auch mit der Realität überein...
Ja das zweite Thread steht auch noch zur Diskussion.
Du brauchst einen Thread für den Task den Rest kann man theoretisch über die SwingUtilities regeln lassen.