修改Jetpack Compose Desktop构建文件修复NoClassDefFoundError
解决Compose Desktop计时工具运行时CoroutineDispatcher错误
问题根源
错误日志里的java.lang.NoClassDefFoundError: android/os/Looper是核心问题:你在JVM桌面项目中引入了Android平台专属的协程依赖,桌面环境不存在Android的Looper类,导致协程的Dispatchers.Main无法初始化,最终触发点击按钮时的运行时异常。
修改方案
调整你的build.gradle.kts,做以下3处修改:
- 移除Android协程依赖:删除
implementation ("org.jetbrains.kotlinx:kotlinx-coroutines-android:0.30.1") - 为Compose插件指定固定版本:和示例保持一致的
1.0.0版本,避免版本兼容问题 - 为Kotlin多平台插件指定匹配版本:使用示例中的
1.5.31版本
修改后的完整build.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { kotlin("multiplatform") version "1.5.31" id("org.jetbrains.compose") version "1.0.0" } group = "com.example" version = "1.0-SNAPSHOT" repositories { google() mavenCentral() maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") } kotlin { jvm { jvmToolchain(11) withJava() } sourceSets { val jvmMain by getting { dependencies { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-javafx") implementation(compose.desktop.currentOs) } } val jvmTest by getting } } compose.desktop { application { mainClass = "MainKt" nativeDistributions { targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb) packageName = "StopWatch" packageVersion = "1.0.0" } } }
为什么这样改
- 移除Android协程依赖:彻底消除了桌面环境不存在的Android类引用,解决
NoClassDefFoundError - 固定插件版本:和可运行示例使用的Kotlin、Compose版本完全匹配,避免版本差异导致的隐性问题
- 保留JavaFX协程依赖:为桌面应用提供正确的
Dispatchers.Main实现,确保协程能在UI线程正常调度,对应你代码中coroutineScope.launch的执行逻辑
内容的提问来源于stack exchange,提问作者Victor Yghor
相关产品推荐
相关产品推荐

