Objekte refresh

Juelin

Bekanntes Mitglied
Hallo Gemeinde,
ich weiss nicht ob ich hier der einzige bin.
Ich komme ja von Delphi und dort gibt es für jedes Bildschirm Objekt,
wie Label, Button usw
eine Refresh Funktion.
Sowas gibt es in javaFX nicht, oder?
Aber stellt euch mal folgendes Programm vor:
Java:
for (int n=0; n<10000000; n++)
    {
    // do something
    Label.setText(String.valueOf(n));
    // hier müsste ein refesh für das Label stehen
    // do something
    }

Die FOR Schleife läuft ja eine Weile.
Aber man würde am Bildschirm im Label nix sehen.
Mit dem Refresh wäre das anders.

Als an alle Spezialisten.
Vielleicht wäre es eine Idee sowas für die Objekte am Bildschirm zu bauen.
Natürlich müsste das auch im Scenebuilder funktionieren.

Alles Gute
Jürgen
 
Ein refresh ist bei JavafX nicht vorgesehen. Bei dem Beispiel ist das Problem schlicht, dass Du UI Thread in der Schleife blockierst. Dadurch kann sich ein Fenster auch gar nicht neu malen.

Also müsste dies in einem eigenen Thread stattfinden. Die Anpassung des Labels wäre dann über Platform.runLater und alles wäre, wie Du es gerne hättest.

Kannst Du ja einfach einmal ausprobieren. Mach da einfach ein Thread.sleep mit in den Thread und dann siehst Du den Zähler.

Also im Thread wäre dann z.B. sowas:
Java:
    public void count() {
        for (int count = 1; count <= 1000; count++) {
            String labelText = "Counter: " + count;
            Platform.runLater(() -> label.setText(labelText) );
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {}
        }
    }

Gestartet könnte es werden mit: new Thread(() -> count()).start();

Du solltest also vermeiden, irgendwelche langlaufenden Dinge direkt im UI Thread durchzuführen. Also in Deiner Anwendung z.B. die Abfrage der Datenbank.
 
Das zugrundeliegende Konzept ist dass man nichts was ein component.refresh() brauchen wuerde auf dem UI-Thread machen soll. Der UI-Thread soll frei bleiben, jede "aufwaendige" und laenger dauernde Arbeit wird in einem eigenen Thread erledigt und deartige Status-Meldungen werden auf den UI-Thread synchronisiert.

Es ist eine andere Herangehensweise an die Thematik, ein anderes Konzept.
 

Neue Themen


Zurück
Oben