2

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

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:您无法使用构造函数(新)显式创建 [com.practice.MyActor] 的实例。您必须使用其中一种工厂方法来创建新演员。要么使用:'val actor = context.actorOf(Props[MyActor])'
(从一个actor内部创建一个受监督的子actor),要么使用'val actor = system.actorOf(Props(new MyActor(..)))' (从 ActorSystem 创建一个顶级演员)

4

1 回答 1

3

那是因为您正在MyActor创建ActorSystem. 在您的工厂内创建 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));
于 2012-05-24T11:01:45.710 回答