我正在嘗試在 IntellJ 的 Kotlin 控制臺專案中測驗協程。我添加了這個庫:org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.0。它有效,直到我使用Dispatchers.Main. 添加后,它拋出了一個運行時例外。
import kotlinx.coroutines.*
val scope = CoroutineScope(Dispatchers.Main);
fun main(args: Array<String>) {
scope.launch { }
}
java.lang.IllegalStateException:缺少帶有主調度程式的模塊。添加提供主調度程式的依賴項,例如“kotlinx-coroutines-android”并確保它與“kotlinx-coroutines-core”具有相同的版本
我org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0按照建議的現有答案切換了庫,但隨后它引發了不同的運行時錯誤。
NoClassDefFoundError: android/os/Looper
似乎該庫適用于Android。使用“kotlinx-coroutines-android”是 Kotlin 控制臺專案的正確解決方案嗎?如果沒有,我該如何解決問題?
uj5u.com熱心網友回復:
Dispatchers.Main很可能不是你想要的。它旨在在 GUI 應用程式的主事件回圈上分派協程。
對于控制臺應用程式,尤其是在您在這里共享的那種片段中,您可能希望使用主執行緒(在其中main()執行)作為事件回圈,并防止main()在協程完成之前回傳。這是通過 using 完成的runBlocking,它會阻止外部代碼的當前執行緒,但將其用作CoroutineScope傳遞this給 lambda的事件回圈runBlocking。
所以你的代碼應該看起來像:
import kotlinx.coroutines.*
fun main() {
runBlocking { // this: CoroutineScope
// there is a CoroutineScope here, the receiver is implicit
launch {
// this code will run in the main thread,
// concurrently with other coroutines and other code
// in the runBlocking lambda
}
// this code will run in the main thread,
// concurrently with the launch and other coroutines
}
}
uj5u.com熱心網友回復:
Dispatchers.Main用于 GUI 應用程式,控制臺專案不支持它。根據協程 UI 編程指南 kotlinx.coroutines有三個模塊,為不同的 UI 應用程式庫提供協程背景關系:
- kotlinx-coroutines-android -- Android 應用程式的 Dispatchers.Main 背景關系。
- kotlinx-coroutines-javafx -- JavaFX UI 應用程式的 Dispatchers.JavaFx 背景關系。
- kotlinx-coroutines-swing ——Swing UI 應用程式的 Dispatchers.Swing 背景關系。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/400116.html
上一篇:AndroidKotlin:如何檢測TextView的最后一個字串包含0到9
下一篇:未找到ListViewvar
