指定为非null的参数为null

时间:2018-02-23 01:16:39

标签: kotlin java-io illegalargumentexception

我在一个较大的项目中有一个函数,它通过另一个函数在启动时调用。这是代码:

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存在且可读/可写。

2 个答案:

答案 0 :(得分:2)

发生异常是因为infoDoc尚未初始化。 Kotlin中的初始化程序从上到下执行,因此看起来infoDocapp.kt上面声明的属性的初始值设定项正在调用readInfo函数。

要解决此问题,请将infoDoc的声明移到调用readInfo的地方之上。

答案 1 :(得分:0)

检查info.txt是否存在,或尝试绝对文件路径。