0

几周前,我开始使用 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”替换。细绳。有人可以告诉我我的方法是否正确,还是我做错了什么?

4

0 回答 0