我刚写了一个简单的JavaFX程序。它显示了一个圆圈。
然后我开始2个不同的线程。
一个修改循环中的X位置。另一个修改Y位置。圆圈移动。它似乎有效。
所以,我的问题是:我应该感到惊讶吗?担心?可以吗?
我知道这一点:
http://docs.oracle.com/javafx/2/threads/jfxpub-threads.htm
但......不知何故,我不需要它?
任何意见都赞赏。
答案 0 :(得分:2)
这里要理解的重要一点是,从FX应用程序线程以外的线程修改UI状态无法保证能够正常工作。这并不意味着它永远不会起作用,但它确实意味着你不应该这样做。它可以在给定的平台上运行,并且可以使用Java和JavaFX运行时的特定实现,但是可能在其他平台上失败,或者在升级JVM时失败,或者甚至只是有时在您运行时发生在执行方法调用时得到错误的时间。
所以,我的问题是:我应该感到惊讶吗?
没有
担心?
您应该担心不建议您这样做。您不必担心它似乎在一个或多个特定平台上工作。
可以吗?
没有
修复很简单...保持你的线程不变,完成这些线程中的所有计算,以及你可能拥有的任何Thread.sleep(...)
或其他暂停,但将调用包装到setCenterX(...)
和setCenterY(...)
中的Platform.runLater(...)
。