我试图解决的是以下情况:
鉴于无限运行的Akka Stream,我希望能够监控流的某些点。我能想到将消息发送到哪里的最佳方式也是ObjectAnimator anim = (ObjectAnimator)AnimatorInflater.LoadAnimator(this,
Resource.Animation.XmlAnimationSmoothGrade);
anim.SetTarget(txtView);
anim.Start();
。这使得我可以非常灵活地连接单个Source或将多个源合并到websocket或我想要连接的任何其他客户端。但是在这种特殊情况下,我试图将ScalaFX与Akka Source连接,但它没有按预期工作。
当我运行下面的代码时,两个计数器都会启动,但过了一会儿,其中一个停止并且永远不会恢复。我知道在使用ScalaFX时需要特别考虑线程,但我没有足够的知识来理解这里发生的事情或调试它。以下是运行的最小示例,该问题应在大约5秒后显示。
我的问题是:
如何更改此代码以按预期工作?
Source
答案 0 :(得分:1)
似乎您在actor系统线程中为属性赋值(因此影响UI)。但是,与UI的所有交互都应该在JavaFX GUI线程中完成。尝试在Platform.runLater来电中包裹value1() = v.toString
和第二个。
除了在JavaFX-Swing集成文档中,我无法找到关于使用runLater
与JavaFX数据交互的明确声明,但这在UI库中是很常见的事情。例如,Swing使用SwingUtilities.invokeLater
方法也是如此。