如何在演员中等待用户输入?

时间:2015-12-21 19:58:34

标签: scala akka

有没有办法让akka演员等待用户输入? 它似乎只是自己读取命令行并保持为null。

编辑:添加了代码中有问题的部分,问题是演员不会等待读取行,而是尝试将null放入变量num:

def chooser: Receive = {

    case ChooseRemote => {

        println("Available remotes:> ")
        paths.zipWithIndex.map{ case(x, i) => "num: " + i + " " + x }.foreach(println)

        println("Enter number:> ")

        try {
            val num = scala.io.StdIn.readLine().toInt

            clientActor ! LookupByLocation(paths(num))
        }
        catch {

            case _: Exception =>
            //context.system.scheduler.scheduleOnce(1.second, self, ChooseRemote)
        }
    }
    case Found(actor) => {

        context.become(menu(actor))

        context.system.scheduler.scheduleOnce(1.second, self, ChooseMenuItem)
    }
}

def receive: Receive = chooser

EDIT2:当我把:fork in run:= true时,问题就出现了 在build.sbt文件中。

1 个答案:

答案 0 :(得分:0)

在sbt文档中找到答案:

  

默认情况下,sbt进程的标准输入不会转发到   分叉的过程。要启用此功能,请配置connectInput   设置:运行中的connectInput:= true