加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala Stdin.readLine()似乎没有按预期工作

发布时间:2020-12-16 18:20:54 所属栏目:安全 来源:网络整理
导读:我正在尝试编写一个简单的控制台客户端应用程序,我可以向用户提供一些选项,获取他们的输入并采取相应的行动.如果我通过intellij运行代码或将其粘贴到 scala控制台,它可以工作.如果我通过sbt运行它(这是我真正需要它运行的方式),我会遇到各种各样的问题. 我有
我正在尝试编写一个简单的控制台客户端应用程序,我可以向用户提供一些选项,获取他们的输入并采取相应的行动.如果我通过intellij运行代码或将其粘贴到 scala控制台,它可以工作.如果我通过sbt运行它(这是我真正需要它运行的方式),我会遇到各种各样的问题.

我有版本0.13.8,操作系统是Mac,我的build.sbt包含:

scalaVersion := "2.11.6"
fork in run := true

编辑我开始使用最小scala激活器模板,以防在此上下文中有用的信息

我已将代码简化为准系统,

import scala.io.StdIn._

object TestClient {
  def main(args: Array[String]): Unit = {
    join()
  }

  def join(): Unit = {
    val name = readLine(s"Enter your name.${System.getProperty("line.separator")}")
    name match {
      case n: String => println(n)
      case o => {
        println(s"invalid name ${o}")
        join()
      };
    }
  }
}

当进入sbt并从提示输入run.似乎发生了以下其中一种情况

1)我一跑完就得到这个例外

Exception in thread "Thread-2" java.lang.OutOfMemoryError: Java heap space
        at java.util.Arrays.copyOf(Arrays.java:3332)
        at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:137)
        at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:121)
        at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:569)
        at java.lang.StringBuffer.append(StringBuffer.java:369)
        at java.io.BufferedReader.readLine(BufferedReader.java:370)
        at java.io.BufferedReader.readLine(BufferedReader.java:389)
        at sbt.BasicIO$$anonfun$processFully$1$$anonfun$apply$8.apply(ProcessImpl.scala:58)
        at sbt.BasicIO$$anonfun$processFully$1$$anonfun$apply$8.apply(ProcessImpl.scala:58)
        at sbt.BasicIO$.readFully$1(ProcessImpl.scala:63)
        at sbt.BasicIO$.processLinesFully(ProcessImpl.scala:69)
        at sbt.BasicIO$$anonfun$processFully$1.apply(ProcessImpl.scala:58)
        at sbt.BasicIO$$anonfun$processFully$1.apply(ProcessImpl.scala:55)
        at sbt.SimpleProcessBuilder$$anonfun$3.apply$mcV$sp(ProcessImpl.scala:354)
        at sbt.Spawn$$anon$3.run(ProcessImpl.scala:17)

2)
没有内存问题,但是在无限循环中获取这些消息,因此readline似乎没有等待任何输入

background log: info: Enter your name.
background log: info: invalid name null
background log: info: Enter your name.
background log: info: invalid name null
...

无论哪种方式,我都无法在控制台中实际输入任何输入.不确定我错过了什么或做错了什么

解决方法

connectInput in run := true

在你的build.sbt中.有关如何在sbt中正确处理货叉的更多信息,请参阅official docs.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读