Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

788
Views
Coroutine, sin Android, falta el módulo con el despachador principal

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

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

java.lang.IllegalStateException: falta el módulo con el despachador principal. Agregue la dependencia que proporciona el despachador principal, por ejemplo, 'kotlinx-coroutines-android' y asegúrese de que tenga la misma versión que 'kotlinx-coroutines-core'

Cambié la biblioteca con org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0 como sugirió la respuesta existente, pero luego arrojó 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 el proyecto de consola Kotlin? Si no es así, ¿cómo soluciono el problema?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Dispatchers.Main está diseñado para aplicaciones GUI, no es compatible con el proyecto de consola. Según la Guía para la programación de UI con coroutines, kotlinx.coroutines tiene tres módulos que brindan contexto de coroutine para diferentes bibliotecas de aplicaciones de UI:

  • kotlinx-coroutines-android -- Dispatchers. Contexto principal para aplicaciones de Android.
  • kotlinx-coroutines-javafx : contexto Dispatchers.JavaFx para aplicaciones de interfaz de usuario JavaFX.
  • kotlinx-coroutines-swing -- Contexto de Dispatchers.Swing para aplicaciones de interfaz de usuario de Swing.

Use runBlocking para suspender la función main hasta que se ejecuten las rutinas:

 fun main(args: Array<String>) = runBlocking { ... }
over 4 years ago · Santiago Trujillo Report

0

Dispatchers.Main probablemente no sea lo que busca aquí. Está destinado a enviar corrutinas en el bucle de eventos principal en las aplicaciones GUI.

Para las aplicaciones de consola, y especialmente en el tipo de fragmento que está compartiendo aquí, probablemente desee usar el subproceso principal (en el que main() se ejecuta) como el bucle de eventos, y evitar que main() regrese hasta que las corrutinas estén hecho. Esto se hace usando runBlocking , que bloquea el subproceso actual para el código externo, pero lo usa como un bucle de eventos para el CoroutineScope pasado this a la lambda que pasa a runBlocking .

Por lo tanto, su código probablemente debería verse así:

 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 } }
over 4 years ago · Santiago Trujillo Report

0

Importe kotlinx-coroutines-swing: (su versión de uso de kotlin) en su gradle de dependencias y compile el programa

implementación "org.jetbrains.kotlinx:kotlinx-coroutines-swing:$kotlin_coroutines_version"

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!