【发布时间】:2014-07-10 06:01:09
【问题描述】:
我使用 JavaFX NumberBindings 来计算某些值。最初一切都按预期工作。然而,在相当短的时间之后,绑定停止工作。我也没有收到异常。
我尝试了几种绑定,以及高级和低级方法。甚至计算本身(当被覆盖时)也会停止并且不再被调用。我还更新到最新的 JDK (1.8.0_05) 并重建/重新启动了一切。
以下最小工作示例说明了该问题。它应该将 System.out.println 主窗口的当前宽度转换为 STDOUT。调整窗口大小约 10 秒后,输出停止。我还尝试将生成的属性绑定到 JavaFX 控件,以确保该属性的继续使用,但这无济于事。我相信我在这里遗漏了属性/绑定的一些非常基本的行为,谷歌似乎根本不知道这种行为。
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);
}
}
【问题讨论】:
-
我可以重现该问题。它看起来像一个错误。你在 jira 上搜索过吗?
-
我似乎找不到现有的错误报告。它看起来很基础,很难想象它是 JDK/JRE 本身的错误。
标签: java binding properties javafx javabeans