有没有好的库可以在scala(或java)应用程序中嵌入命令提示符

有没有好的库可以在scala(或java)应用程序中嵌入命令提示符,java,scala,console,client,Java,Scala,Console,Client,我有一个应用程序,我想有一个提示。如果有帮助的话,这是一个图形数据库实现,我需要一个提示,就像任何其他数据库客户端(MySQL、Postgresql等)一样 到目前为止,我有自己的回复,如: object App extends Application { REPL ! Read } object REPL extends Actor { def act() { loop { react { case Re

我有一个应用程序,我想有一个提示。如果有帮助的话,这是一个图形数据库实现,我需要一个提示,就像任何其他数据库客户端(MySQL、Postgresql等)一样

到目前为止,我有自己的回复,如:

object App extends Application {
    REPL ! Read
}

object REPL extends Actor {
    def act() {
        loop {
            react {
                case Read => {
                    print("prompt> ")
                    var message = Console.readLine
                    this ! Eval(message)
                }
                case More(sofar) => {
                    //Eval didn't see a semicolon
                    print("    --> ")
                    var message = Console.readLine
                    this ! Eval(sofar + " " + message)
                }
                case Eval(message) => {
                    Evaluator ! Eval(message)
                }
                case Print(message) => {
                    println(message)
                    //And here's the loop
                    this ! Read
                }
                case Exit => {
                    exit()
                }
                case _ => {
                    println("App: How did we get here")
                }
            }
        }
    }
    this.start
}
这是可行的,但我真的很想了解历史。不需要完成制表符

对一个好的图书馆有什么建议吗?Scala或Java可以工作


为了清楚起见,我不需要REPL来评估我的代码(我用scala就可以做到这一点),也不需要从命令行调用或使用任何东西。当我的客户端应用程序启动时,我正在寻找一个提示,这是我的用户体验。

BeanShell做了一些你想做的事情:

Scala本身和许多程序使用一个类似于库的REPL。具体来说


我发现了这一点,答案似乎并不乐观。

我明白了。这两个博客真的很有帮助

}

用于(ln)的

println(“未来返回:+s”)
案例失败(ex)=>
println(s“由于${ex.getMessage}而导致解释器失败”)
}
}

是的,像readline一样的库正是我想要的。我还找到了gnu readline的jni包装,名为java readline,但我想我会使用JLine。谢谢!
def interprete(code: String) : Future[String] = {
val p = Promise[String]()

Future {
  var result = reader.readLine()
  p.success(result)
}

writer.write(code + "\n")
writer.flush()

p.future
for (ln <- io.Source.stdin.getLines){
  val f = interprete(ln)
  f.onComplete {
    case Success(s) =>
      println("future returned: " + s)
    case Failure(ex) =>
      println(s"interpreter failed due to ${ex.getMessage}")
  }

}