es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Coroutina, No Android, Falta el módulo con el main dispatcher.

Estoy tratando de probar Coroutine en un proyecto de consola Kotlin en IntellJ. He agregado esta biblioteca: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.0. Funcionó hasta que utilicé Dispatchers.Main. Después de agregarlo, lanzó una excepción en tiempo de ejecución.

import kotlinx.coroutines.*
val scope = CoroutineScope(Dispatchers.Main);
fun main(args: Array) {
    scope.launch {  }
}

java.lang.IllegalStateException: Falta el módulo con el despachador principal. Agrega una dependencia que proporcione el despachador principal, por ejemplo ‘kotlinx-coroutines-android’ y asegúrate de que tenga la misma versión que ‘kotlinx-coroutines-core’

Cambien la biblioteca a org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0 como sugirió la respuesta existente, pero luego lanzó un error de tiempo de ejecución diferente.

NoClassDefFoundError: android/os/Looper

Parece que la biblioteca es para Android. ¿Usar ‘kotlinx-coroutines-android’ es la solución correcta para un proyecto de consola Kotlin? Si no es así, ¿cómo puedo solucionar el problema?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como indica el mensaje de error, el uso de Dispatchers.Main requiere un módulo que proporcione el dispatcher Main. Sin embargo, utilizar org.jetbrains.kotlinx:kotlinx-coroutines-android no es la solución correcta para un proyecto de consola en Kotlin, ya que está destinado al desarrollo de Android.

    En su lugar, para un proyecto de consola en Kotlin, puedes utilizar org.jetbrains.kotlinx:kotlinx-coroutines-swing:1.6.0, que proporciona el dispatcher Main para aplicaciones Swing. Para solucionar el problema, simplemente actualiza las dependencias de tu proyecto para incluir esta librería y reemplaza Dispatchers.Main por Dispatchers.Swing.

    Código de ejemplo:

    import kotlinx.coroutines.*
    
    val scope = CoroutineScope(Dispatchers.Swing);
    fun main(args: Array<string>) {
        scope.launch {  }
    }
    

    Al utilizar Dispatchers.Swing, el dispatcher Main es proporcionado correctamente por el módulo kotlinx-coroutines-swing, evitando así la excepción en tiempo de ejecución.

Comments are closed.