Ich verwende JavaFX NumberBindings, um bestimmte Werte zu berechnen. Zunächst funktioniert alles wie erwartet. Nach relativ kurzer Zeit funktioniert die Bindung jedoch einfach nicht mehr. Ich bekomme auch keine Exception.
Ich habe mehrere Bindungen sowie Ansätze auf hoher und niedriger Ebene ausprobiert. Sogar die Berechnung selbst (wenn überschrieben) stoppt einfach und wird nicht mehr aufgerufen. Ich habe auch auf das neueste JDK (1.8.0_05) aktualisiert und alles neu erstellt/neu gestartet.
Das folgende minimale Arbeitsbeispiel veranschaulicht das Problem. Es sollte System.out.println die aktuelle Breite des Hauptfensters auf STDOUT. Nachdem die Größe des Fensters für etwa 10 Sekunden geändert wurde, stoppt die Ausgabe einfach. Ich habe auch versucht, die resultierende Eigenschaft an ein JavaFX-Steuerelement zu binden, um die weitere Verwendung der Eigenschaft sicherzustellen, aber das war erfolglos. Ich glaube, ich vermisse hier ein sehr grundlegendes Verhalten der Eigenschaften/Bindungen, Google scheint dieses Verhalten überhaupt nicht zu kennen.
import javafx.application.Application;
import javafx.beans.binding.NumberBinding;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class BindingsProblem extends Application {
@Override
public void start(Stage primaryStage) {
// Initialization...
StackPane root = new StackPane();
Scene scene = new Scene(root, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
// Binding - The problem occurrs here!
NumberBinding currentWidthPlusTen = primaryStage.widthProperty().add(10);
IntegerProperty boundNumberProperty = new SimpleIntegerProperty();
boundNumberProperty.bind(currentWidthPlusTen);
boundNumberProperty.addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
System.out.println(newValue.toString());
}
});
}
public static void main(String[] args) {
launch(args);
}
}
Ich kann das Problem reproduzieren. Es sieht aus wie ein Fehler. Haben Sie auf Jira gesucht?
– Assylias
21. Mai 2014 um 14:21 Uhr
Ich kann anscheinend keine vorhandenen Fehlerberichte finden. Es scheint etwas so Grundlegendes zu sein, dass es schwer vorstellbar ist, dass es sich um einen Fehler im JDK/JRE selbst handelt.
– unterkuerbis
21. Mai 2014 um 15:09 Uhr