我使用JavaFX NumberBindings來計算某些值。最初一切都按預期工作。然而,在相當少的時間之後,綁定就停止工作。我也沒有收到例外。JavaFX Bean綁定突然停止工作
我試過了幾個綁定,以及高級和低級別的方法。即使計算本身(當被重寫時)剛剛停止並且不再被調用。我也更新到最新的JDK(1.8.0_05)並重建/重新啓動了所有內容。
下面的最小工作示例說明了這個問題。它應該將System.out.println主窗口的當前寬度轉換爲STDOUT。調整窗口大小約10秒後,輸出停止。我也嘗試將結果屬性綁定到JavaFX控件,以確保Property的繼續使用,但這沒有用。我相信我在這裏錯過了Property/Bindings的一些非常基本的行爲,Google似乎完全不知道這種行爲。
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上搜索過嗎? – assylias
我似乎無法找到現有的錯誤報告。它似乎是如此基礎的東西,很難想象它是JDK/JRE本身的錯誤。 – underkuerbis