Swing JProgressBar soll ende erkennen

dalco

Aktives Mitglied
hallo,

eine frage zur JProgressbar, ich lass rel. lange daten berechnen, in sql-datenbank schreiben, etc...
während dessen möchte ich eine JProgressbar anzeigen lassen.
woher kenne ich das genaue ende der anwendung, ich möchte nicht die variante nehmen, die rechts-links geht solange er rechnet.
ich will die,die von links nach rechts läuft, was ich bisher mache ist:

ich lasse es erst berechnen, messe die zeit, es dauert ca. 8 sekunden,
dann mache ich eben 10 steps und nen sleep(800), funktioniert, ich muss das ganze aber 2x durchlaufen lassen, einmal berechnen und dann nochmal mit der anzeige.
nur zum verständnis, die anzeige selbst hat ja keine bedeutung ich möchte eben nur optisch diesen fortschrittsverlauf, dass das ganze dann letztlich 16 sekunden dauert, ist nicht sooooo schlimm, mich würde aber interessieren wie man das ende bestimmt von einer berechnung, die gerade startet.....
und man nicht weiß wielange es dauert

wie ist es zb. wenn man fotoshop installiert, etc????

danke einstweilen
tino
 
Also die "all in one" Lösung wird es da wohl nicht geben.
Bei einer Programminstalation weiss der Installer ja, wie gross die Datenmenge ist, die umgesetzt werden soll. Dadurch kann man sich errechnen, wie lange der Vorgang noch etwa dauert und wieviel % bereits abgearbeitet wurden.

Bei der Interaktion mit einer Datenbank siehts da schon etwas schwieriger aus.
Dort würde ich mir "milestones" setzen, die dann der Progressbar einen neuen Stand zuweisen.

zBsp. 3 Schritte:

1. Daten von der DB Holen
2. Daten Bearbeiten
3. Daten zurück in die DB schicken

1. 33% Sprung, wenn fertig
2. die nächsten 33% kannste ja anhand der DatenMenge genauer anzeigen
3. nochmal 33%
und 4. 100%, wenn das OK aus deinem Proggi kommt, dass alles korrekt erledigt wurde.

PS:
bin aber auch gespannt auf weitere Vorschläge

Gruß Vanny
 
wenn deine DB sache nicht nach dem Prinzip laeuft "Ich lese mir X datensaetze aus und bearbeite die", so dass du vorher abfragen kannst wie gross X ist, dann wuerde ich auch den milestones ansatz nehmen.
Sobald du X weisst kannst du ja einen Progress berechnen und diesen dann anzeigen
 
danke für eure antworten,
das mit den 3 milestones hatte ich schon gemacht, funktioniert, aber sieht halt etwas hauruck-artig aus,
2x3 sekunden nichts, dann die sprünge -> fertig.

solange ich keine bessere idee finde lass ichs so
danke
tino
 
du musst schon irgendeine Information haben, wie lange irgendwas in deinem Programm dauert,
dann kannst du zumindest versuchen, den Balken häufiger zu aktualisieren,

hast du z.B. Information zur Anzahl der zu verarbeitenden Daten, vielleicht eine vorausgeschicktes 'select count(*)' an die DB?,
die Wertigkeit, 10ms * Anzahl Einträge, müsste allerdings direkt in deinen Programmcode, kann je nach Umgebung falsch liegen

zum Vergleich: wenn du ein Webseite lädst oder ein Formular abschickst, kann der Browser auch keinen Wartebalken einblenden,
das Ergebnis könnte einen Augenblick oder erst 30 sec später erscheinen, es gibt keinerlei Annahmen -> ProgressBar unmöglich,
außer wenn auch der Browser zum nächsten Schritt, etwa der Darstellung, übergeht
 

Neue Themen


Zurück
Oben