指定为非空的参数为空
Parameter specified as non-null is null
我在一个较大的项目中有一个函数,该函数在启动时通过另一个函数调用。这是它的代码:
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
是自定义的 class,而 infoDoc
是在 app.kt
中声明的。我可以提供所需的任何其他代码。
编辑: 已进行检查以确保 info.txt
存在,并且是 readable/writable。
检查info.txt是否存在,或者尝试绝对文件路径。
异常发生是因为infoDoc
还没有初始化。 Kotlin 中的初始化程序是从上到下执行的,因此看起来 app.kt
中 infoDoc
上面声明的 属性 的初始化程序正在调用 readInfo
函数。
要解决此问题,请将 infoDoc
的声明移至调用 readInfo
的位置上方。
我在一个较大的项目中有一个函数,该函数在启动时通过另一个函数调用。这是它的代码:
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
是自定义的 class,而 infoDoc
是在 app.kt
中声明的。我可以提供所需的任何其他代码。
编辑: 已进行检查以确保 info.txt
存在,并且是 readable/writable。
检查info.txt是否存在,或者尝试绝对文件路径。
异常发生是因为infoDoc
还没有初始化。 Kotlin 中的初始化程序是从上到下执行的,因此看起来 app.kt
中 infoDoc
上面声明的 属性 的初始化程序正在调用 readInfo
函数。
要解决此问题,请将 infoDoc
的声明移至调用 readInfo
的位置上方。