2012-05-24 53 views
1

我想用无类型的演员工厂创建演员,编译发生得很好。但在运行应用程序时,出现以下错误。我在配置中缺少任何东西吗?无法使用akka java api的UnTypedActorFactory创建演员

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])'
(从一个演员内部创建一个受监管的儿童演员)或'val actor = system.actorOf(Props(new MyActor(..) ))”(创建从ActorSystem顶层 演员)

回答

3

那是因为你正在创建的ActorSystemMyActor实例。在工厂内部创建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)); 
+0

谢谢Dexrin.It工作。我必须掌握对新的MyActor()的引用,现在我正在初始化create()方法中的引用。 – vijay