无法使用akka java api的UnTypedActorFactory创建actor

我试图用无类型的演员工厂创建一个演员,编译很好 . 但是在运行应用程序时,我收到以下错误 . 我在配置中遗漏了什么吗?

Java代码:

MyActor myactor = new MyActor();  //MyActor extends UnTypedActor
ActorSystem system = ActorSystem.create("mynamespace");
ActorRef actor = system.actorOf(new Props(new UntypedActorFactory() {
      public UntypedActor create() {
          return myactor;
      }
  }));

运行时错误:

引起:akka.actor.ActorInitializationException:您无法使用构造函数(new)显式创建[com.practice.MyActor]的实例 . 您必须使用其中一种工厂方法来创建新actor . 使用:'val actor = context.actorOf(Props [MyActor])'(从actor中创建受监督的子actor),或'val actor = system.actorOf(Props(new MyActor(..)))' (从ActorSystem创建顶级actor)

回答(1)

2 years ago

那是因为你在 ActorSystem 之外创建了 MyActor 的实例 . 在工厂内部创建Actor(这就是它的用途;-)),它应该没问题 .

ActorSystem system = ActorSystem.create("mynamespace");
ActorRef actor = system.actorOf(new Props(new UntypedActorFactory() {
  public UntypedActor create() {
    return new MyActor();
  }
}));

在这种情况下,您甚至不需要工厂,因为您有一个默认构造函数 . 只需将类作为参数传递给 Props

system.actorOf(new Props(MyActor.class));