0

Play! で Akka とスケジューラを使用しようとしています。Java のフレームワーク 2.1.1。
Play 2.1.0 で既に Scala で使用していますが、インポートがすべて機能しているわけではありません。

私の現在の輸入品:

import play.Application;
import play.GlobalSettings;
import play.Logger;
import play.libs.*;
import utils.MongoUtil;
import play.libs.Akka;
import akka.actor.ActorRef;
import akka.actor.Props;

import java.util.*;
import java.util.concurrent.TimeUnit;

import jobs.*;

import models.User;

import scala.concurrent.duration.Duration;
import scala.concurrent.duration.FiniteDuration;

import com.mongodb.*;

私のコード:

            ActorRef cron = Akka.system().actorOf(new Props(Cron.class));
            Akka.system().scheduler().schedule(
              Duration.create(0, TimeUnit.SECONDS),
              Duration.create(24, TimeUnit.HOURS),
              cron,
              "tick"
            );

スタックトレース:

 error: no suitable method found for schedule(FiniteDuration,FiniteDuration,ActorRef,String)
[error]                 Akka.system().scheduler().schedule(
[error]                                          ^
[error]     method Scheduler.schedule(FiniteDuration,FiniteDuration,Runnable,ExecutionContext) is not applicable
[error]       (actual argument ActorRef cannot be converted to Runnable by method invocation conversion)
[error]     method Scheduler.schedule(FiniteDuration,FiniteDuration,Function0<BoxedUnit>,ExecutionContext) is not applicable
[error]       (actual argument ActorRef cannot be converted to Function0<BoxedUnit> by method invocation conversion)
[error]     method Scheduler.schedule(FiniteDuration,FiniteDuration,ActorRef,Object,ExecutionContext) is not applicable
[error]       (actual and formal argument lists differ in length)

インターネットで見つけた多くのことを試しましたが、何もうまくいかないようです。

前もって感謝します !

編集: API doc の最新バージョンで自動的に再起動されないのは本当に好きではありません…<br> "tick" の後に Akka.system().dispatcher() を追加する必要がありました。

4

1 に答える 1

1

エラーは一目瞭然です:

[error] method Scheduler.schedule(FiniteDuration,FiniteDuration,Runnable,ExecutionContext) is not applicable
[error] (actual argument ActorRef cannot be converted to Runnable by method invocation conversion)

ActorRefはありませんRunnable

この方法で schedule を呼び出す必要があります (正確にはこの方法ではありませんが、プログラムに合わせて変更してください)。

system.scheduler().schedule(Duration.create(50, TimeUnit.MILLISECONDS),
new Runnable() {
 ...   
}
}, system.dispatcher());
于 2013-04-29T08:30:16.790 に答える