Следующий код пожаров java.lang.RuntimeException: A bound value cannot be set
:JavaFX 8 Двунаправленный связывание
public class Test {
public static void main(String[] args) {
final DoubleProperty amount = new SimpleDoubleProperty(100_000.00);
final DoubleProperty rate = new SimpleDoubleProperty();
final DoubleProperty part = new SimpleDoubleProperty();
rate.bind(part.divide (amount.getValue()));
part.bind(rate.multiply(amount.getValue()));
rate.set(0.025);//<<----------------------------------- Here is the cause
System.out.println("Part: " + part.get());
part.set(1200);
System.out.println("Rate: " + rate.get());
}
}
Использование Bindings.bindBidirectional может быть решение, но я не знаю, как.
Как избежать бесконечного цикла уведомления? – Aubin
Этого не происходит. Определение запуска InvalidationListener: не запускать, если переменная уже недействительна. Я узнал об этом [здесь] (http://docs.oracle.com/javase/8/javafx/properties-binding-tutorial/binding.htm#JFXBD107). Ищите «Но если привязка уже недействительна, приемник недействительности не будет запускаться снова» – chris
Да! Это решение выглядит хорошо, я переведу его в свое предложение – Aubin