2015-10-14 82 views
-5

多線這是我的代碼:寫在斯卡拉

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

回答

1

最有可能的是,你的問題是,Play.current.configuration.getString("play.runable.c.command")具有類型爲Option[String],並在調用get方法幾乎不應該被調用的選項。如果這種方法不存在,世界將會變得更加美好。我離題了。

如果對getString的此調用返回None,則對get的調用將拋出一個異常,表示沒有值可以獲取。

+0

但play.runable.c.command在我的配置文件中有 –

+0

play.runable.c.command =「./{executablename}」 是這個命令的問題 –

0

看起來Play.current.configuration.getString("play.runable.c.command")返回None,當撥打get時會拋出異常。

這不應該做!使用mapgetOrElse的組合來避免意外的行爲。例如:

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)

如果你不知道,當選項定義(這是一個Some(x))的map方法執行和當選項是None

注忽略:如果它返回一個None嘗試調試。確認您沒有輸入錯誤,並且您正在閱讀正確的配置文件