【问题标题】:Error creating child actor创建子演员时出错
【发布时间】:2016-06-18 19:39:42
【问题描述】:

在一个 Actor 中,我创建了一个像下面这样的子 Actor

ActorRef sessionEventHandlerActor = getContext().actorOf(Props.create(SessionHandler.class), sessionId);

这是 SessionHandler 演员:

public class SessionHandler extends UntypedActor {

    public SessionHandler() {
        getContext().setReceiveTimeout(Duration.create(1, TimeUnit.MINUTES));
    }


    @Override
    public void onReceive(Object message) throws Exception {


     }
}

我收到以下错误:

Caused by: akka.actor.ActorInitializationException: You cannot create an instance of [actors.SessionHandler] explicitly using the constructor (new). You have to use one of the 'actorOf' factory methods to create a new actor. See the documentation.
    at akka.actor.ActorInitializationException$.apply(Actor.scala:165)
    at akka.actor.Actor$class.$init$(Actor.scala:421)
    at akka.actor.UntypedActor.<init>(UntypedActor.scala:97)
    at org.esi.actors.SessionHandler.<init>(SessionHandler.java:22)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at java.lang.Class.newInstance(Class.java:442)
    at akka.util.Reflect$.instantiate(Reflect.scala:45)
    at akka.actor.NoArgsReflectConstructor.produce(Props.scala:358)
    at akka.actor.Props.newActor(Props.scala:249)
    at akka.actor.ActorCell.newActor(ActorCell.scala:552)
    at akka.actor.ActorCell.create(ActorCell.scala:578)

我没有看到我如何创建演员有任何问题。有谁知道问题出在哪里?

谢谢

【问题讨论】:

  • @BranislavLazic 谢谢,但正如您在我的代码中看到的,我没有在 ActorSystem 之外创建 actor:getContext().actorOf(Props.create(SessionHandler.class), "name ");
  • 异常指的是哪一行(22)?

标签: akka actor


【解决方案1】:

我认为没有问题了,但我认为您需要省略 sessionId 参数,因为 create 会尝试将其应用于构造函数。

ActorRef sessionEventHandlerActor = getContext().actorOf(Props.create(SessionHandler.class));

据我了解 Java API。我只在scala中使用过。

【讨论】:

    猜你喜欢
    • 2021-02-11
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    • 2010-10-31
    相关资源
    最近更新 更多