You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 07:00:05