使用ScalaFX监控Akka Streams源

时间:2017-06-10 17:37:17

标签: scala javafx akka akka-stream scalafx

我试图解决的是以下情况: 鉴于无限运行的Akka Stream,我希望能够监控流的某些点。我能想到将消息发送到哪里的最佳方式也是ObjectAnimator anim = (ObjectAnimator)AnimatorInflater.LoadAnimator(this, Resource.Animation.XmlAnimationSmoothGrade); anim.SetTarget(txtView); anim.Start(); 。这使得我可以非常灵活地连接单个Source或将多个源合并到websocket或我想要连接的任何其他客户端。但是在这种特殊情况下,我试图将ScalaFX与Akka Source连接,但它没有按预期工作。 当我运行下面的代码时,两个计数器都会启动,但过了一会儿,其中一个停止并且永远不会恢复。我知道在使用ScalaFX时需要特别考虑线程,但我没有足够的知识来理解这里发生的事情或调试它。以下是运行的最小示例,该问题应在大约5秒后显示。

  

我的问题是:

     

如何更改此代码以按预期工作?

Source

1 个答案:

答案 0 :(得分:1)

似乎您在actor系统线程中为属性赋值(因此影响UI)。但是,与UI的所有交互都应该在JavaFX GUI线程中完成。尝试在Platform.runLater来电中包裹value1() = v.toString和第二个。

除了在JavaFX-Swing集成文档中,我无法找到关于使用runLater与JavaFX数据交互的明确声明,但这在UI库中是很常见的事情。例如,Swing使用SwingUtilities.invokeLater方法也是如此。