我在一个较大的项目中有一个函数,它通过另一个函数在启动时调用。这是代码:
val infoDoc = File("res/info.txt")
private fun readInfo(): MutableList<Reminder> {
val reminders = mutableListOf<Reminder>()
infoDoc.forEachLine {
//...
}
return reminders
}
但是,当我尝试运行它时,我收到此错误:
java.lang.ExceptionInInitializerError
Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.io.FilesKt__FileReadWriteKt.forEachLine, parameter $receiver
at kotlin.io.FilesKt__FileReadWriteKt.forEachLine(FileReadWrite.kt)
at kotlin.io.FilesKt__FileReadWriteKt.forEachLine$default(FileReadWrite.kt:154)
at main.IoKt.readInfo(io.kt:22)
at main.IoKt.read(io.kt:8)
at main.AppKt.<clinit>(app.kt:23)
Exception in thread "main"
请注意,Reminder
是自定义类,infoDoc
中声明了app.kt
。我可以提供任何其他所需的代码。
修改:有检查以确保info.txt
存在且可读/可写。
答案 0 :(得分:2)
发生异常是因为infoDoc
尚未初始化。 Kotlin中的初始化程序从上到下执行,因此看起来infoDoc
中app.kt
上面声明的属性的初始值设定项正在调用readInfo
函数。
要解决此问题,请将infoDoc
的声明移到调用readInfo
的地方之上。
答案 1 :(得分:0)
检查info.txt是否存在,或尝试绝对文件路径。