JavaFX und Update/Refresh - Problem unter Linux

Hallo,

unter Linux (Fedora38) passiert es mir, dass er geänderte Elemente in einem LineChart nicht richtig aktualisiert. Ich habe davon schön öfters gelesen, doch jetzt fängt es langsam an zu nerven, da ich viele Elemente ersetzen lassen.

Kleine Abhilfe gab mir der Artikel: How to force refresh the Scene in JavaFX (and 3 reasons you don't have to) – Eden Coding

Aber richtig helfen tut der auch nicht.

Hat jemand eine Lösung?

Wirklich mit JavaFX auskennen tu’ ich mich zwar nicht, aber … auch auf die Gefahr hin, mir da wegen eines möglicherweise unbedeutenden Swing-Hintergrundes irgendwas anzumaßen: Kannst du Code posten, mit dem man das Problem reproduzieren kann?

Die beiden Techniken machen zwar das gleiche, aber im Hintergrund also die „Maschine“ ist eine andere. Davon sollte man sich schon auskennen.

Und nein, den Code kann, darf und will ich nicht veröffentlichen. Zum einen wegen Geheimnissen und zum anderen wegen der Komplexität.

Den relevanten Artikel habe ich erwähnt, aufgrund dessen ich ein BugFix für mich generiert habe. Aber der kann das Problem nur zu 80% abfangen. Ich hätte aber gerne 100%.

:blush:

Ja, man kann einfach keine weiteren Informationen dazu posten, die hier helfen könnten dieses Problem weiter zu analysieren.

Der Quellcode ist so geheim und so komplex, dass man natürlich Angst haben muss, dass jemand einen nicht funktionierenden Ausschnitt eines einfachen Grafen kopiert.

Wüsste sonst auch nicht, wie ich das programmieren soll.

Ich habe inzwischen eine Lösung gefunden, die sehr gut funktioniert. Vielleicht interessiert es ja jemanden:

Ich lasse nicht nur einfach den Graphen in ein XYChart zeichnen (denn da tritt der Fehler am häufigsten auf), sondern hinterlege in der Scene das Chart mit einen transparanten PNG Image (über eine StackPane).

:blush:

Ziemlich albern. Je werniger isoliert das Problem ist, umso wahrscheinlicher ist, dass es durch die umgebende Komplexität verursacht wird. Unter Using JavaFX Charts: Line Chart | JavaFX 2 Tutorials and Documentation ist ein LineChart mit 20 Zeilen code. Klink’ da noch irgedeine Änderung rein, und selbst wenn es dann 100 Zeilen sind, ist das locker zu überblicken.

1 „Gefällt mir“

Beweis: Wenn JavaFX das Problem des Bildaufbaus durch seine eigenen Methoden nicht beheben kann, es unter Linux jedoch durch ändern der Fenstergröße (durch nicht Java von außen) funktioniert. Und wenn das Problem nur unter Linux auftritt.

Ja, vielleicht hat JavaFX da einen Bug. Das ändert nichts daran, dass es etwas geben können muss, was man hier posten kann, und womit man das Problem reproduzieren kann. Ansonsten kannst du’s ja mal im JavaFX Bugtracker versuchen: „Help, JavaFX is not updating something, but I can’t show you the code - please fix this bug ASAP“.

Indirekt related: Ich hab’ schon gesehen, dass Swing-Noobs sowas geschrieben haben wie

// Force many repaints, because sometimes
// something is not drawn properly
for (int i=0; i<1000; i++) {
    myComponent.repaint();
}

Und das sollte dann in ‚production‘ gehen :woozy_face:

Swing verwende ich nicht. :wink: Habe auch noch nie.

Es tritt jetzt nur noch seltenen Fällen auf, da ich jedoch mitunter die Leistungsgrenze von JavaFX erreiche, also viele Objekte und Panes verwalten muss, ist mir eine stabile Lösung unter allen Betriebssystemen wichtig.

Ein Bugreport hilft mir derzeit nicht, da diese Lösung zu spät kommen würde. Vielleicht beschäftige ich mich später intensiver damit.