Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Akka调度API引发MissingMethodException_Java_Groovy_Akka_Scheduling - Fatal编程技术网

Java Akka调度API引发MissingMethodException

Java Akka调度API引发MissingMethodException,java,groovy,akka,scheduling,Java,Groovy,Akka,Scheduling,Java8(Groovy)在这里使用Akkacom.typesafe.Akka:Akka-actor_2.11:2.5.4。我正在尝试创建一个参与者(AppMaster),该参与者创建/拥有/管理另一个参与者(StateChecker),并计划每4秒发送一条StateChecker消息: class CheckState {} class StateChecker extends AbstractActor { // For this question, it really doesn't

Java8(Groovy)在这里使用Akka
com.typesafe.Akka:Akka-actor_2.11:2.5.4
。我正在尝试创建一个参与者(
AppMaster
),该参与者创建/拥有/管理另一个参与者(
StateChecker
),并计划每4秒发送一条
StateChecker
消息:

class CheckState {}

class StateChecker extends AbstractActor {
  // For this question, it really doesn't matter what this actor does
}

class AppMaster extends AbstractActor {
    ActorRef stateChecker

    @Override
    Receive createReceive() {
      receiveBuilder()
            .match(Init, { message ->
              stateChecker = context.actorOf(Props.create(StateChecker, "yes", 20), "state-checker")

              FiniteDuration startDur = Duration.Zero()

              FiniteDuration freqDur = Duration.create(4000, TimeUnit.MILLISECONDS)
              CheckState checkState = new CheckState()
              ExecutionContextExecutor executor = context.system().dispatcher()

              context.system().scheduler().schedule(startDur, freqDur, stateChecker, checkState,
                executor)
            })
        .build()
    }
}
当我运行此命令时,会出现以下异常:

groovy.lang.MissingMethodException: No signature of method: akka.actor.LightArrayRevolverScheduler.schedule() is applicable for argument types: (scala.concurrent.duration.FiniteDuration, scala.concurrent.duration.FiniteDuration, akka.actor.LocalActorRef, com.me.myapp.messages.CheckState, akka.dispatch.Dispatcher) values: [0 days, 4000 milliseconds, Actor[akka://myapp/user/myapp-master/o1-keeper#-1837899613], ...]
Possible solutions: schedule(scala.concurrent.duration.FiniteDuration, scala.concurrent.duration.FiniteDuration, java.lang.Runnable, scala.concurrent.ExecutionContext), schedule(scala.concurrent.duration.FiniteDuration, scala.concurrent.duration.FiniteDuration, scala.Function0, scala.concurrent.ExecutionContext), schedule(scala.concurrent.duration.FiniteDuration, scala.concurrent.duration.FiniteDuration, akka.actor.ActorRef, java.lang.Object, scala.concurrent.ExecutionContext, akka.actor.ActorRef)
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58)
    at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:49)
我在日志语句中添加了异常,在调度过程中引发异常:

context.system().scheduler().schedule(startDur, freqDur, stateChecker, checkState,
  executor)

你知道我需要做什么来解决这个问题吗?因为这是Akka的Java API的一个问题,所以我确实需要通过Java API找到答案。

问题是传递给
schedule()
方法的参数与该方法的重载版本都不匹配。您可以在中看到重载版本的
schedule()
的签名

您尝试使用的版本如下:

您缺少最后一个参数,它是指定为计划邮件发件人的
ActorRef
。如果
StateChecker
不关心是谁向其发送
CheckState
消息,那么最简单的修复方法是将
null
作为最后一个参数传入:

context.system()
       .scheduler()
       .schedule(startDur, freqDur, stateChecker, checkState, executor, null)
                                                                     // ^

您应该更喜欢
Actor.noSender()
而不是
null
context.system()
       .scheduler()
       .schedule(startDur, freqDur, stateChecker, checkState, executor, null)
                                                                     // ^