这是我的代码:
bufferedWriter.write(Play.current.configuration.getString("play.compile.c.command").get.replace("{objectname}", registerdJobDetails.executableNm.mkString.split('.')(0)).replace("{executablename}", getExecutableFolderName(jobId) + registerdJobDetails.executableNm))
bufferedWriter.newLine()
bufferedWriter.write(Play.current.configuration.getString("play.runable.c.command").get.replace("{objectname}", registerdJobDetails.executableNm.mkString.split('.')(0)))
只有第一行被写入,但其他行没有被写入。
我收到错误
java.util.NoSuchElementException:None.get
答案 0 :(得分:1)
最有可能的问题是Play.current.configuration.getString("play.runable.c.command")
类型Option[String]
并且正在调用Option上的get
方法,而这种方法几乎不应该被调用。如果这种方法甚至不存在,世界将是一个更好的地方。我离题了。
如果对getString
的此调用返回None
,则对get
的调用会抛出一个无法获取值的异常。
答案 1 :(得分:0)
似乎Play.current.configuration.getString("play.runable.c.command")
返回None
,在调用get
时会抛出异常。
永远不应该这样做!使用map
和getOrElse
的组合可以避免意外行为。例如:
val runableConfig = Play.current.configuration.getString("play.runable.c.command")
val s = runableConfig.map {
case runable =>
runable.replace("{objectname}", registerdJobDetails.executableNm.mkString.split('.')(0)
}.getOrElse("NO CONFIG FOUND")
bufferedWriter.write(s)
或者您甚至可以在地图中制作bufferedWriter.write(s)
。
如果您不知道,map
方法在定义选项时执行(它是Some(x)
),并在选项为None
注意:如果它返回
None
尝试调试它。确认您没有拼写错误,并且您正在阅读正确的配置文件