【问题标题】:Cannot execute kotlin coroutine (no such method exception无法执行kotlin协程(无此方法异常
【发布时间】:2018-04-12 10:01:01
【问题描述】:

我从 kotlin 示例中获取了这个简单的代码 sn-p:

fun main(args: Array<String>) = runBlocking<Unit> {
    withTimeout(1300L) {
        repeat(1000) { i ->
            println("I'm sleeping $i ...")
            delay(500L)
        }
    }
}

当我尝试运行它时,它会抛出

java.lang.NoSuchMethodError: kotlinx.coroutines.experimental.ScheduledKt.withTimeout$default(JLjava/util/concurrent/TimeUnit;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Ljava/lang/Object;

我使用 kotlinVersion = '1.1.51'

有什么建议吗?

【问题讨论】:

  • 您是否使用一个版本的库进行编译,并使用另一个版本运行?
  • 这是一个编译器错误。请将问题提交至kotl.in/issue
  • @RomanElizarov 不,显然这不是编译器错误萌芽 Idea 15.0.3 缺陷,当我使用 gradle test 测试代码时,它按预期失败并出现 TimeoutCancellationException i>,否则(在 IntelliJ 中)我得到 NSM 异常。

标签: kotlin kotlinx.coroutines


【解决方案1】:

在您的情况下,请确保在您的 build.gradle 文件中启用协程:

kotlin {
    experimental {
        coroutines "enable"
    }
}

您还应该使用 launch(UI) 触发协同程序,并显式调用 wait() 和挂起的方法。其余代码将在 UI 线程上执行。

希望它能解决您的问题!

【讨论】:

  • 嘿,感谢您的回答,我的 gradle conf 包含提到的声明(使用实验性协程)。关于启动,我认为 withTimeout 是启动的直接替代(有额外的执行时间框架)。顺便说一句,没有 UI 代码,我只有一个带有一种方法的 kotlin 脚本文件。是不是说kotlin的例子不完整,需要一些额外的代码?
  • EDIT:还有一件事,确实,当我从 withTimeout 切换到启动它时,它可以工作,但是,我对超时功能更感兴趣。
  • 当然,我会的,但是您的回答还没有帮助解决我的问题。
猜你喜欢
  • 2019-04-13
  • 2018-01-01
  • 2018-01-30
  • 2020-07-07
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
相关资源
最近更新 更多