21

JavaFX/ScalaFX アプリケーションで Akka アクターを実行するには?

(これは最初の回答に基づく質問の更新です)

同じ実行コンテキストを共有するソリューションですか? JavaFx ExecutorService に基づく Actors ディスパッチャーを持つことを意味しますか? (UI操作コードを実行するもの)

それは、1 つのエージェントが UI を表し、それを操作できるということですか? 以下で提案されているように、UI ExecutorService に 2 人のアクターがいる場合、それはエージェント (UI であるオブジェクト) 間で状態を共有することを意味しませんか?

2 つのアクターは、異なるエグゼキューター サービスを使用しているときに通信できますか? 以下で提案されていることから、一部のエージェントは UI Executor Service 上にあり、他のエージェントはそうでないため、私はこれを求めています。

最後に、なぜ akka をそのまま使用し、on Executor コンテキストが異なり、Platform.runLater を使用すると、UI のパフォーマンスに影響を与える可能性があります。これは、同じアプリケーションに複数のエグゼキューター サービスがあるという問題を提起します。それは悪いことですか?

4

3 に答える 3

6

JavaFX で複数のスレッドを使用する場合、考慮すべきことがいくつかあります。

  • シーン グラフに触れることになるコード (たとえば、コントロールにバインドされたデータを更新するなど) は、 でラップする必要がありますPlatform.runLater。JavaFX の組み込みマルチスレッド API (つまりTaskおよびService) を使用する場合、これは自動的に行われますが、他のマルチスレッド ユーティリティを使用する場合は、自分で行う必要があります。

  • マルチスレッド ユーティリティ (Akka など) には、JavaFX イベント スレッド用の余地を残すように何らかの方法で指示する必要があります (私はそう思います)。Serviceのソースを見ると、エグゼキューターを構成するときにかなり注意を払っていることがわかります。この詳細についてはよくわかりませんが、Scala のFutureを JavaFX で使用して実験したところ、デフォルトの を使用すると UI に応答がないことがわかりました。これは、実装ExecutionContextに基づくカスタムのものを使用すると消えました。Service

上記の 2 つの点を忘れさせるような方法で Scala Futures または Akka を操作するための ScalaFX (または私が知る限り他のツールキット) にはサポートがありませんが、調べるのは確かに興味深いでしょう。

于 2013-12-29T21:53:22.720 に答える