Geschätze Zeit implementieren

Kababär

Top Contributor
Hi,

ich suche nach einer Möglichkeit, um die verbleibende Zeit bzw geschätzte Zeit separat und stets aktuell in einem JavaFX Label darzustellen.
Wie könnte ich so etwas realisieren?
 

Thallius

Top Contributor
Nein natürlich nicht. Das must du dir schon selber ausrechnen. Du misst einfach wie lange ein Schleifendurchlauf dauert und rechnest das dann hoch...
 

Kababär

Top Contributor
Wäre Reflection dazu eine gute Lösung?
Denn der empirische Wert würde ja verfälscht bzw. viel zu gering ausfallen, wenn ich mehrere Schleifen habe, die nicht verschachtelt, sondern nacheinander auftreten.
 

Thallius

Top Contributor
Ich habe keine Ahnung was jetzt Reflections damit zu tun haben sollen.

Wenn Du mehrere Schleifen, also mehrere Schritte hast, dann würde ich das dem User auch so vermitteln. Also einfach ein 1/3 oder so hinter die Progressbar und dann zählt die halt so oft runter bis alle 3 Schritte erledigt sind.
 

Kababär

Top Contributor
Naja ich könnte ja die Methoden aufrufen und die Zeit messen. Aber das hätte zur Folge dass das Programm doppelt so lang bräuchte.

Dadurch entsteht ja auch eine Verzerrung unter der Annahme, dass jede Schleife in ihrer Laufzeit variiert.

Ich werde mir was einfallen lassen. Aber danke für die Ansätze :)
 

Kababär

Top Contributor
Du hast also keine Schleife sondern eine Methode die etwas längliches ausführt und willst wissen wie lange das denn nun dauern wird und wieviel davon du schon erledigt hast oder wie ?

Ich habe viele Methoden und ganz schön viele Schleifen (circa 30) .
Aber ja der Rest stimmt :)


edit: Wie wäre es Tests für die einzelnen Methoden oder Schleifen zu schreiben (ca. 1000 Tests bzw. Durchläufe) und das empirische Mittel zu berechnen und dieses als Erwartungswert für die Appromixation zu verwenden?
 

InfectedBytes

Top Contributor
Das wird nichts nützen, da du dann nur weißt wie es auf deinem Rechner läuft und unter den Voraussetzungen die du bei den Test hattest.
Auf einem anderen Rechner oder sobald du vielleicht noch nen weiteres Programm laufen hast, ist das ganze wieder unbrauchbar. Außerdem kann es sogar unter exakt den gleichen Ausgangsbedingungen dennoch zu unterschieden kommen.
 

JStein52

Top Contributor
Aber wenn es dir darum geht zu wissen wie lange ein Schleifendurchlauf dauert dann mach es doch wie oben schon mal gesagt: du misst laufend wie lange jeder einzelne Durchlauf dauert und rechnest daraus immer wieder hoch wie lange die restlichen Durchläufe noch dauern.
 

Tobse

Top Contributor
Ich habe sowas mal (mit Unterstützung des NetBeans GUI Builders) programmiert:

Ist eine Klasse ProgressFrame, welche eine Progressbar und ein JLabel darstellt. Bei jedem Aufruf von setValue() wird der Fortschritt berechnet und eine Zeitabschätzung angezeigt. Das ist natürlich bei weitem nicht so akkurat wie eine Abschätzung, welche auf einen speziellen Algorithmus ausgelegt ist.
Und das GUI Layout ist wie gesagt mit dem NetBeans GUI Builder gemacht.

Verwendungsbeispiel:

Java:
ProgressFrame pF = new ProgressFrame("Berechnet Zeitpunkt des Weltuntergangs....");
for (int i = 0;i < 100;i++) {
    pF.setValue(i);
    Thread.sleep(1000);
}

Das sollte dann die 1m 40s relativ präzise runterzählen.

Java:
import java.util.Date;

public class ProgressFrame extends javax.swing.JFrame {

    private Date lastChange = null;
    private int value = 0;
    private int lastValue = 0;
    private int maximum;
  
    public ProgressFrame(String title) {
        initComponents();
        setTitle(title);
        progressBar.setStringPainted(false);
        progressBar.setMinimum(0);
        progressBar.setMaximum(100);
        pack();
        setLocationRelativeTo(null);
    }

    public void setValue(int value)
    {
        progressBar.setValue(value);
        this.value = value;
        if (lastChange == null)
        {
            lastChange = new Date();
        }
        Date now = new Date();
        long diff = now.getTime() - lastChange.getTime();
        if (diff >= 1000)
        {   
            int dx = (int) (((new Date()).getTime() - lastChange.getTime()));
            float change = (float) (value - lastValue) / (float) dx;
            etaLabel.setText(
                formatAsETA((int) (((float) (maximum - value) / change) / 1000))
                + " remaining"
            );
            this.lastValue = value;
            lastChange = now;
        }
    }
    public void setMinimum(int min)
    {
        progressBar.setMinimum(min);
    }
    public void setMaximum(int max)
    {
        progressBar.setMaximum(max);
        maximum = max;
    }
    public void setAction(String action)
    {
        currentActionLabel.setText(action);
    }
    public void setIndeterminate(boolean is)
    {
        progressBar.setIndeterminate(is);
        if (is)
        {
            etaLabel.setText("");
        }
        else
        {
            etaLabel.setText(
                "estimating..."
            );
        }
    }
  
    private static String formatAsETA(int nSeconds)
    {
        int minutes = 0;
        while (nSeconds >= 60)
        {
            nSeconds -= 60;
            minutes++;
        }
        if (minutes != 0)
        {
            return minutes + "m " + nSeconds + "s";
        }
        else
        {
            return nSeconds + "s";
        }
    }
  
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        currentActionLabel = new javax.swing.JLabel();
        etaLabel = new javax.swing.JLabel();
        progressBar = new javax.swing.JProgressBar();

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
        setResizable(false);

        currentActionLabel.setText("-");

        etaLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        etaLabel.setText("estimating...");

        progressBar.setToolTipText("");
        progressBar.setValue(30);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(progressBar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(currentActionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 271, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 48, Short.MAX_VALUE)
                        .addComponent(etaLabel)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(currentActionLabel)
                    .addComponent(etaLabel))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel currentActionLabel;
    private javax.swing.JLabel etaLabel;
    private javax.swing.JProgressBar progressBar;
    // End of variables declaration//GEN-END:variables
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Berechnung der Zeit funktioniert nicht wie erwartet: Date, GregorianCalendar Allgemeine Java-Themen 16
F Zeit Optimierung - bzw. ms Optimierung Allgemeine Java-Themen 35
J Message Box soll bei bestimmter Zeit angezeigt werden Allgemeine Java-Themen 19
K CET-Zeit benutzen Allgemeine Java-Themen 6
Blender3D AWT Fehlerhafte Zeit bei Calender und Date DateFormat Allgemeine Java-Themen 8
2 Joda Time - Localtime mit anderer Zeit vergleichen? Allgemeine Java-Themen 1
O Java Hardware Software Zeit Allgemeine Java-Themen 7
H Bestimmte Aufgaben zur bestimmter Zeit/ in bestimmten Intervallen Allgemeine Java-Themen 3
F Zeit ermitteln Allgemeine Java-Themen 2
Q Zeit in GUI selbst aktualisieren Allgemeine Java-Themen 5
D Klassen Zeit aus NMEA-Stream in SimpleDateFormat Allgemeine Java-Themen 17
M AudioClip in Spiel mehrfach in kurzer Zeit abspielen Allgemeine Java-Themen 3
N java.util.Date - Zeit auf 00:00 setzen Allgemeine Java-Themen 3
R Raum und Zeit Allgemeine Java-Themen 11
S Zeit Allgemeine Java-Themen 4
Z zeit zwischen maus drücken und loslassen Allgemeine Java-Themen 7
T Methodenparameter zur Compile-Zeit überprüfen Allgemeine Java-Themen 8
J Lizenz auf Zeit Allgemeine Java-Themen 8
X Codeabarbeitung innerhalb des Hauptprogramms für bestimmte Zeit unterbrechen Allgemeine Java-Themen 2
prakdi Zeit zum Durchlauf der Schleifen unverständlich!? Allgemeine Java-Themen 3
A JavaVM Zeit Windows 7 Allgemeine Java-Themen 9
T Zeit von einem Server/Webseite auslesen und in eigener GUI anzeigen Allgemeine Java-Themen 6
C Leerzeilen verbrauchen Zeit! Allgemeine Java-Themen 5
J Datum und Zeit Allgemeine Java-Themen 4
data89 Zeit-Diagramm erstellen Allgemeine Java-Themen 11
G JComboBox getSelectedItem Zeit Allgemeine Java-Themen 5
Kr0e Sekunden -> Zeit Allgemeine Java-Themen 14
T Mit Datum und Zeit rechnen Allgemeine Java-Themen 8
B System CPU Zeit / Last auslesen Allgemeine Java-Themen 2
J zeit überscheidungen ermitteln Allgemeine Java-Themen 6
P Thread Demonstrationr eist durch die Zeit Allgemeine Java-Themen 4
A Compilierdatum/Zeit in Code eingenerieren Allgemeine Java-Themen 13
Kidao Wie ordne ich die aktuelle Zeit in einer Zeitreihe eine? Allgemeine Java-Themen 6
J zeit stoppen Allgemeine Java-Themen 11
M Zeit eines rechners im netzwerk ermitteln Allgemeine Java-Themen 6
B Aktuelle Zeit im Format YYYY-MM-DD HH-MM-SS in Logfile schre Allgemeine Java-Themen 8
C Umrechnung der Zeit Allgemeine Java-Themen 8
B 2 JList instanzen wo nur einer zur selben Zeit selektierbar? Allgemeine Java-Themen 8
I Thread eine bestimmte Zeit zur Ausführung geben Allgemeine Java-Themen 2
P Zeit messen Allgemeine Java-Themen 16
M Zeit läuft rückwärts Allgemeine Java-Themen 3
K Thread Safe Zeit Messung Allgemeine Java-Themen 2
D Programmunterbrechung für eine bestimmte Zeit (Millisikunden Allgemeine Java-Themen 10
K ServerSocket benötigt unmengen an Zeit Allgemeine Java-Themen 7
D Zeit messen Allgemeine Java-Themen 2
G try auf zeit Allgemeine Java-Themen 8
R Garbage Collector rennt die ganze Zeit Allgemeine Java-Themen 7
M Fortschritt: verbleibende Zeit errechen. Allgemeine Java-Themen 2
F Zeit errechnen mit GregorianCalendar Allgemeine Java-Themen 8
F vergangene Zeit berechnen Allgemeine Java-Themen 6
A Unix Zeit Allgemeine Java-Themen 2
D Datum und Zeit - Date, Calendar oder GregorianCalender ? Allgemeine Java-Themen 13
X Parameter bei Start über Batch-Datei übergeben(Tag und Zeit) Allgemeine Java-Themen 3
C Vergangene Zeit seit Anwendungsstart messen Allgemeine Java-Themen 5
T Zeit aufaddieren Allgemeine Java-Themen 3
T zeit in java Allgemeine Java-Themen 4
L Buchungssystem implementieren Allgemeine Java-Themen 2
M Kann man Annotationen auf Klassen einschränken die ein Interface implementieren? Allgemeine Java-Themen 1
MiMa Was sollte man ins JavaDoc implementieren?? Allgemeine Java-Themen 17
L Generator für einen Parser implementieren Allgemeine Java-Themen 13
L Template Engine entwerfen und implementieren Allgemeine Java-Themen 4
D OOP Gemeinsamen ID-Raum für zwei Klassen implementieren Allgemeine Java-Themen 7
P BruteForce Ansatz implementieren Allgemeine Java-Themen 32
A Breitensuche mit Hop-Distanzen in Java - Wie implementieren? Allgemeine Java-Themen 4
M Maven Deutsche Post API implementieren Allgemeine Java-Themen 2
S Eclipse Probleme beim Implementieren / Ausführen von jUnit 5-Test Suites Allgemeine Java-Themen 14
N Best Practice Allgemeines Verhalten für ein Interface implementieren? Allgemeine Java-Themen 7
B Live Search implementieren Allgemeine Java-Themen 4
S Threads Kann mir jemand helfen eine parallele Hilfsklasse zu implementieren..? Allgemeine Java-Themen 3
T Generisch implementieren Allgemeine Java-Themen 31
J Wie implementieren, Frge an die Erfahrenen... Allgemeine Java-Themen 7
M Interface einer Library implementieren Allgemeine Java-Themen 3
F Schlüsselworte RSA Verschlüsselung implementieren Allgemeine Java-Themen 5
H Copy Paste implementieren ausserhalb des Programms? Allgemeine Java-Themen 2
D Aufgabe: Schnittstelle und Proxy implementieren Allgemeine Java-Themen 2
B Best Practice HTML Output Optimal implementieren Allgemeine Java-Themen 3
I Mehrfaches Implementieren eines generischen Interface Allgemeine Java-Themen 9
DStrohma In abstrakter Klasse Konstruktor von Instanz implementieren Allgemeine Java-Themen 11
X Modalität von JDialog nachträglich in JFrame implementieren? Allgemeine Java-Themen 8
O Plugin perfomrant implementieren Allgemeine Java-Themen 12
P InterfaceMethoden nicht implementieren Allgemeine Java-Themen 5
C Hilfe bei Adressbuch-Programmierung, wie am Besten mit JList implementieren Allgemeine Java-Themen 2
A RandomAccessFile - "insert" implementieren? Allgemeine Java-Themen 4
nrg Wie würdet ihr eine "Dauerschnittstelle" implementieren? Allgemeine Java-Themen 5
T Von JComponent erben und Set implementieren Allgemeine Java-Themen 2
D Wozu runnable implementieren? Allgemeine Java-Themen 3
D PriorityQueue selbst implementieren Allgemeine Java-Themen 15
E Wie Assoziationen implementieren in Java Allgemeine Java-Themen 22
B mathematische Formeln, umformungen nicht einzeln implementieren Allgemeine Java-Themen 6
J Undo auf eine ArrayList implementieren Allgemeine Java-Themen 3
deetee ListIterator implementieren Allgemeine Java-Themen 3
A feststellen, welche Klassen ein Interface implementieren Allgemeine Java-Themen 3
B Generisches Singleton implementieren Allgemeine Java-Themen 12
T Interface "on-the-fly" implementieren? Allgemeine Java-Themen 3
G Interface - Klassen implementieren das - Reflection ok? Allgemeine Java-Themen 4
G Interface mehrfach implementieren Allgemeine Java-Themen 5
@ zur Laufzeit Interface aus jar implementieren? Allgemeine Java-Themen 5
MQue Vector implementieren Allgemeine Java-Themen 2
MQue Interface implementieren Allgemeine Java-Themen 7
P Liste von Klassen die ein Interface implementieren speichern Allgemeine Java-Themen 12

Ähnliche Java Themen


Oben