2012-05-24 54 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