JavaFX ProgressBar

Hi,

ich versuche vor dem schreiben einiger Daten in eine Oracle DB meinen ProgressBar auf -0.1 zu setzten.
Allerdings wird das immer erst nachdem alle Daten geschrieben wurden gemacht, obwohl es im Code vorher steht und ich verstehe nicht warum…


 Platform.runLater(new Runnable(){
                                @Override
                                public void run() {
                                    demo.ProfileController.testBar.setProgress(-0.1);
                                    ;
                                }
                            });
            

            Stage stageDBInsertAnzeigen = new Stage();
            schreiben.WriteToDB tw2 = new schreiben.WriteToDB();        
            tw2.start(stageDBInsertAnzeigen);

nach meinem Verständnis soll doch zuerst der testBar gesetzt werden und dann das .start ausgeführt werden, oder?

ruhig etwas aufpassen, was du hier so postest, JavaFX gehört in den Titel wenn du es verwendest,
und es gibt eine spezielle Area für GUI-Probleme, das hat nichts mit Grundlagen zu tun

gegen dein altes Thema dazu spricht auch nicht so viel…


runLater() legt einen Auftrag ab, den der eine GUI-Thread abarbeitet, sobald er Zeit hat,
wenn die gesamten Codezeilen in einer Methode stehen, die der GUI-Thread ausführt, dann kommt eben das alles noch dran,
erst wenn die Methode beendet ist, hat der GUI-Thread wieder Zeit,

solltest du dich also in einer Methode vom GUI-Thread bearbeitet befinden, dann ist runLater() sogar unnütz,
dann kannst du auch direkt setProgress() aufrufen, allerdings wird noch nicht unbedingt gezeichnet, weil dafür der GUI-Thread auch wiederum keine Zeit hat

deswegen ist ein Standardweg, aus Button-ActionListenern (in Swing) Threads zu starten,
nur aus nebenläufigen Threads, also für andere Akteure als den GUI-Thread, lohnt sich das runLater()-Konzept

http://docs.oracle.com/javase/tutorial/uiswing/concurrency/

Ok, danke… das verstehe ich so halbwegs. Allerdings bin ich mir noch nicht sicher wie ich das dann lösten kann das er mir den ProgressBar gleich aktualisiert.

Auch ohne runLater, also nur mit <<demo.ProfileController.testBar.setProgress(-0.1);>> wird er auch erst aktuallisiert wenn alles fertig ist.

immer wieder gilt: zeichnen kann der GUI-Thread erst wenn er Zeit hat, wenn die Methode beendet ist,
alles langfristige muss in einem Thread, entweder klassisch manuell ein richtiges Thread-Objekt,
oder eines der angebotenen höheren Konzepte dafür, in Swing etwa SwingWorker, in JavaFX meinetwegen Call, was auch immer, nach Tutorials