Uso JavaFX NumberBindings per calcolare determinati valori. Inizialmente tutto funziona come previsto. Dopo un po 'di tempo, tuttavia, l'associazione smette di funzionare. Neanche io ricevo un'eccezione.JavaFX Beans improvvisamente smette di funzionare
Ho provato diverse associazioni, nonché approcci ad alto e basso livello. Anche il calcolo stesso (quando sottoposto a override) si ferma e non viene più chiamato. Ho anche aggiornato l'ultimo JDK (1.8.0_05) e ho ricostruito/riavviato tutto.
Il seguente esempio di lavoro minimo illustra il problema. Dovrebbe System.out.println la larghezza attuale della finestra principale a STDOUT. Dopo aver ridimensionato la finestra per circa 10 secondi, l'uscita si interrompe semplicemente. Ho anche cercato di associare la proprietà risultante a un controllo JavaFX, al fine di garantire l'utilizzo continuato della proprietà, ma ciò non ha avuto alcun risultato. Credo che mi manchi un comportamento molto basilare di Property/Bindings, Google sembra non conoscere questo comportamento.
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);
}
}
Posso riprodurre il problema. Sembra un insetto. Hai cercato su jira? – assylias
Non riesco a trovare segnalazioni di bug esistenti. Sembra essere qualcosa di così semplice, è difficile immaginare che si tratti di un bug nel JDK/JRE stesso. – underkuerbis