几周前,我开始使用 Scala 编程并使用 Akka Actors。我正在尝试实现一个使用 Akka ActorSystem 来服务多个 UI 的 scala 程序。我目前正在尝试设置一个 ScalaFx 应用程序并通过内部演员将其连接到我的演员系统。因此,我编写了以下代码来设置我的演员系统和我的控制器:
object Game {
// Main class of the game in which the actor system gets started
def main(args: Array[String]): Unit = {
val actorSystem = ActorSystem.create("gameActorSystem")
val controller = actorSystem.actorOf(Props[Controller], "controller")
var gui = actorSystem.actorOf(Props(new GuiApp.GuiActor(controller)), "guiActor")
println("Start Game")
gui ! StartGame
gui ! "Hello ScalaFx App."
}
}
class Controller extends Actor {
private val observers = scala.collection.mutable.SortedSet.empty[ActorRef]
override def receive: Receive = {
case StartGame => startGame()
case RegisterObserver => observers += sender(); sender ! PrintMessage("Subscription from: [" + sender().toString() + "]")
}
... controller code
}
然后我实现了一个简单的 ScalaFx App:
object GuiApp extends JFXApp {
class GuiActor(controller: ActorRef) extends Actor {
controller ! RegisterObserver
override def receive: Receive = {
case StartGame => start()
case s:String => Platform.runLater{
label.text = "Message: " + s
}
}
}
def start(): Unit = {
val args = Array.empty[String]
main(args)
}
val label = new Label("Loading ...")
stage = new PrimaryStage {
title = "ScalaFX Game"
scene = new Scene {
root = new BorderPane {
padding = Insets(25)
center = label
}
}
}
}
所以我基本上想做的是启动我的scala程序,然后注册akka系统并注册控制器和gui actor。注册 gui 演员后,我想启动 GUI,然后告诉 GUI 设置“Hello ScalaFx App”。串到 GUI 上。
到目前为止,它正在工作,ScalaFx GUI 启动了,但带有“正在加载...”的 GUI 的初始内容并没有被“Hello ScalaFx App”替换。细绳。有人可以告诉我我的方法是否正确,还是我做错了什么?