Ahoi.
Ich habe ein klitzekleines Problem mit dem Updaten eines Charts.
Folgender an einen jButton gebundener Ablauf funktioniert zwar, aber das Chart updatet nur mit dem letzten Update des Datasets.
Es geht darum, dass eine Start- und Zielzeit und ein Intervall gesetzt wird. Daraus wird die Anzahl der nötigen Schritte "steps" berechnet, die dann einzeln im Chart angezeigt werden sollen.
Sinngemäß soll das Chart alle 500ms aktualisiert werden, nachdem die Schleifen die entsprechenden Werte berechnen und in das Dataset einfügen.
Die Aktualisierung klappt auch, das println gibt passende Werte im passenden Zeitintervall aus. Leider aktualisiert das Chart nur einmal. Die letzte Berechnung und Ausgabe (println) fallen mit der Aktualisierung des Charts zusammen.
Eigentlich soll es so laufen, dass die innere for-Schleife durchläuft und das Chart aktualisiert wird, dann wird 500ms gewartet und die äußere for-Schleife macht den nächsten Durchlauf.
Hat jemand eine Idee, warum das nicht klappt?
Ich vermute mittlerweile, dass ich einen neuen Thread starten muss, der dann pausiert wird....aber ich hab, ehrlich gesagt, keinen Plan
cya und danke
Garm
Ich habe ein klitzekleines Problem mit dem Updaten eines Charts.
Folgender an einen jButton gebundener Ablauf funktioniert zwar, aber das Chart updatet nur mit dem letzten Update des Datasets.
Java:
class IntervallListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
_model.startzeit = new BigDecimal(_view.jTextField1.getText()); // nimmt Eingabe aus TextField
_model.zielzeit = new BigDecimal(_view.jTextField2.getText()); // nimmt Eingabe aus TextF
_model.zeitintervall = new BigDecimal(_view.jTextField3.getText()); // nimmt Eingabe aus TextF
BigDecimal zielinsec = _model.zielzeit.multiply(_model.yrinsec, _model.mc); // rechnet eingegebene Jahre in Sekunden um
BigDecimal startinsec = _model.startzeit.multiply(_model.yrinsec, _model.mc); // rechnet eingegebene Jahre in Sekunden um
BigDecimal intervallinsec = _model.zeitintervall.multiply(_model.yrinsec, _model.mc); // rechnet eingegebene Jahre in Sekunden um
BigDecimal steps = ( _model.zielzeit.subtract(_model.startzeit)).divide(_model.zeitintervall, _model.mc3);
int i = steps.intValue(); // berechnet Anzahl der für die Zeitdifferenz mit Intervall nötigen Schritte
for(int d = 1; d <= i; d++)
{
BigDecimal wieoft = new BigDecimal(d);
BigDecimal newtime = startinsec.add(intervallinsec.multiply(wieoft)); // aktuelle Zeit nach Rundenzahl*Intervall
for(int z=0; z<_model.planettime.length; z++)
{
BigDecimal newplanettime = newtime.divide(_model.time[z], _model.mc);
_model.planettime[z] = newplanettime.doubleValue();
} // berechnet im wesentlichen das Zeitverhältnis für die Position der Planeten
_model.berechnePLANETENPOSITION(); // berechnet aus Zeitverhältnis die Position der Planeten
_view.jLabel20.setText(String.valueOf(newtime.divide(_model.yrinsec, _model.mc2)));
_model.aktuellezeit = newtime;
_model.aktuellezeitinyr = newtime.divide(_model.yrinsec, _model.mc2);
_view.jTextField1.setText(String.valueOf(_model.aktuellezeitinyr)); //gibt berechnete Zeitwerte in GUI aus
_chart.createDataset2(); // erstellt Dataset aus neuen Werten
_chart.plot2.setDataset(2, _chart.datasetPLANETENPOSITION); // setzt neues Dataset und löst damit Aktualisierung des Charts aus
try { Thread.sleep(500); }
catch (InterruptedException ex) { } // hier liegt wohl das problem
System.out.println(
"Positionen "+d
+"\n"+
"px1 "+_model.px1
+" "+
"py1 "+_model.py1
+"\n"
);
}
}
}
Es geht darum, dass eine Start- und Zielzeit und ein Intervall gesetzt wird. Daraus wird die Anzahl der nötigen Schritte "steps" berechnet, die dann einzeln im Chart angezeigt werden sollen.
Sinngemäß soll das Chart alle 500ms aktualisiert werden, nachdem die Schleifen die entsprechenden Werte berechnen und in das Dataset einfügen.
Die Aktualisierung klappt auch, das println gibt passende Werte im passenden Zeitintervall aus. Leider aktualisiert das Chart nur einmal. Die letzte Berechnung und Ausgabe (println) fallen mit der Aktualisierung des Charts zusammen.
Eigentlich soll es so laufen, dass die innere for-Schleife durchläuft und das Chart aktualisiert wird, dann wird 500ms gewartet und die äußere for-Schleife macht den nächsten Durchlauf.
Hat jemand eine Idee, warum das nicht klappt?
Ich vermute mittlerweile, dass ich einen neuen Thread starten muss, der dann pausiert wird....aber ich hab, ehrlich gesagt, keinen Plan
cya und danke
Garm
Zuletzt bearbeitet: