ProgressBar während Berechnung

Bender

Mitglied
Hallo,

ich habe etwa folgende Situation
Java:
boolean calcAgain=true;
while(!calcAgain){
    dataModel.startCalculation();
    calcAgain = (new CalculationOutput(dataModel)).showDialog();
}

Habe einen Datensatz auf dem eine Berechnung ausgeführt wird, die immer unterschiedlich dauert.
Danach wird das Ergebnis angezeigt und man kann dort Änderungen vornehmen. Dann wird mit diesen Änderungen die Berechnung erneut gestartet.
Da die Berechnung allerdings auch mehrere Minuten dauern kann, würde ich gerne irgendwie eine ProgressBar oder eine ProgressMonitor benutzen allerdings weiß ich nicht wie ich es dann mit der Schleife hinbekommen soll, da nach startCalculation() der Code ja nicht weiter ausgeführt werden darf, allerdings soll die Progressbar auch nur angezeigt werden, wenn wirklich die Berechnung stattfindet.

Die Funktion startCalculation() habe ich jedoch nicht implementiert, dort sind keine Veränderungen möglich.

Hat jemand vielleicht ne Idee?
 
Deine Berechnung muss in nem separaten Thread laufen, da sonst der EDT blockiert wird.
Währed der Berechnung musst du dann regelmäßig die Progressbar updaten.
 
Ich hatte das Problem selbst auchmal. Damals hatte ich dafür sogar ne fertige Klasse, allerdings find ich das Zeug grade nichtmehr. Das Ganze war aber etwa so aufgebaut, die Methoden musst du dann eben selbst implementieren.
Java:
interface Job {
    public int getMaxValue();
    public int getMinValue();
    public int getCurrentValue();
    public boolean isDone();
    public boolean isTrailing(); // das sind diese balken, die auf der Progress-bar hin und herfahren
    public void run() throws Exception;
    public String getCurrentDescription(); // Text für die Progress-Bar
}
class PrograssFrame extends JFrame {
    public ProgressFrame(Job toDo) {
    }
    public void setActionListener(ActionListener l) { // Wird aufgerufen, wenn Job.isDone()==true ist
    }
    public void start() throws Exception() {
        // startet einen neuen Thread und führt den Job aus
        // gelichzeitig (2ter thread) wird der status überprüft
        // und die progressbar im Frame geupdated
    }
}
 

Neue Themen


Zurück
Oben