在使用JavaFX(Java8)工作一段时间之后,我发现Properties的概念非常有用,允许使用bean兼容变量绑定以使用计算树更新更改,例如:
class Person {
StringProperty name;
...
}
Run Code Online (Sandbox Code Playgroud)
Person owner;
Person human;
owner.name().bind(human.name());
Run Code Online (Sandbox Code Playgroud)
这允许将GUI控件绑定到"模型",以自动更新更改.
所以我也开始Property<T>在模型中使用该类(我的数据对象正在进行我的功能操作).但JavaFX是一个单线程GUI实现,只有在JavaFX线程中完成时,才允许设置链接到某些GUI控件的属性.否则将抛出异常:
Exception in thread "Thread-5" java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-5
Run Code Online (Sandbox Code Playgroud)
如果我现在开始编写多线程代码,我终于无法使用这些属性,即使我愿意.我无法承担将Platform.runLater()调用中的每个更改封装到JavaFX线程中的能力.
为什么JavaFX不提供线程安全的Property-Binding?(或者是吗?)
javafx ×1