【发布时间】:2021-07-29 20:20:48
【问题描述】:
我正在Kotlin 中开发一个多平台 RISC-V 模拟器,我已经被一个问题困住了一个多星期了。我已经尝试了所有可以在网上找到的方法,但都没有成功。
给你一点背景:
我正在尝试通过WebSockets将this项目(here你可以下载我的代码)绑定到VMB(虚拟主板,here你可以下载最新的,尚未发布的版本)。我已经完成了通信部分并在JVM 分支上对其进行了测试(我还制作了另一个小型 Kotlin JS project,其中仅包含通信部分的代码,它工作正常,但由于某种原因,当我把所有东西放在一起它就是行不通的)。它构建时没有任何错误,甚至可以正常工作(在一定程度上),直到我尝试连接到VMB,然后我在浏览器控制台中收到错误消息Uncaught TypeError: this.resultContinuation_0 is undefined。我在这个问题上浪费了很多时间,而且我很确定这只是我遗漏的一些小东西(甚至可能很明显)。
重现问题的步骤:
- 下载项目(您将需要
venus和VMB) - 如果没有,请在您的计算机上下载并安装
grunt - 在
vmb文件夹中双击mother.exe并确保单击电源按钮(它仅适用于Windows,抱歉) - 在
InteliJ中打开venus项目并使用gradle构建它(IntelliJ通常会自动将项目识别为gradle) - 构建完成后,在
venus文件夹中打开Powershell或cmd,运行grut dist - 结果现在应该位于
out目录中。 - 您可能需要
XAMPP在本地服务器上托管文件,以防您收到CORS Error - 打开页面后,转到
Simulator选项卡,然后单击Assemble & Simulate from Editor按钮。 - 您现在应该能够在控制台中看到错误。
非常感谢任何帮助,因为我已经被这个问题困扰了好几天了。谢谢!
编辑:
进一步挖掘后,我注意到每当我调用suspend 函数onclick 时都会出现问题。
例如:
我在Driver.kt做了一个函数:
@JsName("connect")
suspend fun connect() {
sim.connectToMotherboard()
}
connectToMotherboard() 是一个挂起的函数,每当按下按钮时我都会调用它。
HTML:
<button class="button is-primary" onclick="driver.connect()">Connect to Motherboard</button>
这给了我与标题中提到的相同的错误。在我为开发者下载 Firefox 后,我收到了这条消息:
Uncaught TypeError: can't access property "context", this.resultContinuation_0 is undefined
【问题讨论】:
-
能否请您包含引发此异常的代码的 sn-p
-
问题是我不知道究竟是哪一行导致了这个错误,我还做了一个只包含通信部分的小项目(只是为了让我能看到发生了什么并且还可以更快地构建项目)。我想把这个小项目整合到
venus。问题是,当我运行小项目时,它与VMB连接得很好,但是当我尝试将它集成到主项目中时,它给了我这个错误。这是一个小项目:github.com/benny1611/korio-websockets-test -
这里又是没有集成的项目,这不会构建,因为我在前端
Driver.kt的“正常”函数中调用suspend函数。链接:ufile.io/hsiwsl2j
标签: kotlin gradle simulator kotlin-coroutines kotlin-js