Deveco使用过程中报错
Deveco使用过程中报错
报错信息
com.intellij.openapi.diagnostic.RuntimeExceptionWithAttachments: Read access is allowed from inside read-action only (see Application.runReadAction()); If you access or modify model on EDT consider wrapping your code in WriteIntentReadAction or ReadAction; see https://jb.gg/ij-platform-threading for details
Current thread: Thread[#1101,DefaultDispatcher-worker-47,5,main] 1404156340 (EventQueue.isDispatchThread()=false)
SystemEventQueueThread: Thread[#87,AWT-EventQueue-0,6,main] 833715845
at com.intellij.util.concurrency.ThreadingAssertions.createThreadAccessException(ThreadingAssertions.java:218)
at com.intellij.util.concurrency.ThreadingAssertions.softAssertReadAccess(ThreadingAssertions.java:155)
at com.intellij.openapi.application.impl.ApplicationImpl.assertReadAccessAllowed(ApplicationImpl.java:922)
at com.intellij.psi.impl.source.PsiFileImpl.assertReadAccessAllowed(PsiFileImpl.java:197)
at com.intellij.psi.impl.source.PsiFileImpl.loadTreeElement(PsiFileImpl.java:201)
at com.intellij.psi.impl.source.PsiFileImpl.calcTreeElement(PsiFileImpl.java:826)
at com.intellij.psi.impl.source.PsiFileImpl.getNode(PsiFileImpl.java:1025)
at com.intellij.psi.impl.source.PsiFileImpl.getNode(PsiFileImpl.java:54)
at com.huawei.histudio.cpp.completion.CppCompletionContributor.checkRemoveSpaces(CppCompletionContributor.java:496)
at com.huawei.histudio.cpp.completion.CppCompletionContributor$CppCompletionProvider.lambda$getCompletionResult$2(CppCompletionContributor.java:374)
at com.intellij.openapi.application.ex.ApplicationUtil.runWithCheckCanceled$lambda$3$lambda$1(ApplicationUtil.kt:57)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$14(CoreProgressManager.java:674)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:749)
at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:705)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:673)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:79)
at com.intellij.openapi.application.ex.ApplicationUtil.runWithCheckCanceled$lambda$3(ApplicationUtil.kt:54)
at com.intellij.openapi.application.ex.ApplicationUtil$runWithCheckCanceled$deferred$1.invokeSuspend(ApplicationUtil.kt:74)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
at kotlinx.coroutines.internal.SoftLimitedDispatcher$Worker.run(SoftLimitedDispatcher.kt:125)
at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:99)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:608)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:873)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:763)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:750)
具体情况
在使用Deveco进行代码编辑的过程中和打开项目时,会经常弹出这样的报错框,但是不影响正常的编辑作业.
有人知道这是什么报错吗?需要关闭或者打开什么权限之类的吗
这是 DevEco(基于 IntelliJ 平台)的 IDE 内部异常/插件线程模型错误,不是你工程代码写错、更不是“应用权限”之类的问题。
从堆栈看得很明确:com.huawei.histudio.cpp.completion.CppCompletionContributor(华为/DevEco 的 C/C++ 补全插件)在后台线程里去读 PSI(PsiFileImpl.getNode()),但没有包在 IntelliJ 要求的 ReadAction 里,于是 IDE 抛出:
Read access is allowed from inside read-action only …
所以它会弹 “IDE Error / Fatal error” 之类的框,但多数情况下 不影响基本编辑,只是 C/C++ 补全/格式化/索引某些场景可能偶发不稳定。
你能做的处理(按优先级)
-
升级 DevEco Studio 到同大版本的最新补丁版
- 这类问题通常是 IDE/插件 bug,很多会在补丁里修复。
- 同时检查是否有 “C/C++ 插件 / NDK / Cpp completion” 相关组件更新。
-
临时规避:关闭/禁用触发插件功能
- 如果你项目不需要 C/C++ 补全:在 Settings/Preferences → Plugins 里尝试禁用与 C/C++ / CPP Completion / Native / NDK 相关插件(名称各版本略有不同),然后重启 IDE。
- 如果需要 C++:看看设置里是否有 “新的补全引擎/实验性补全” 开关,改为旧引擎/关闭实验性功能(有些版本确实能绕过)。
-
清 IDE 缓存/重建索引
- File → Invalidate Caches / Restart(清缓存重启),很多“打开项目就弹”的情况会缓解。
-
不想再弹窗:把“IDE Fatal Errors”通知改为仅记录
- IntelliJ 系 IDE 一般可以在 Settings → Appearance & Behavior → Notifications 里,把 IDE Fatal Errors / Plugin Error 这类通知组改成 Log only(仅日志,不弹窗)。DevEco 大多也有类似入口。
-
如果频繁出现:建议带日志提单/反馈
- 你可以在弹窗里点 “Report” 或把
idea.log里的对应异常片段发给华为/DevEco 支持,关键字就是你贴的CppCompletionContributor.checkRemoveSpaces。
- 你可以在弹窗里点 “Report” 或把
从报错来看,你遇到的应该是是鸿蒙 / IDEA 平台线程安全错误,核心原因:在非主线程、没有读权限的情况下,读取了代码 / 项目模型(PSI 文件),属于插件 / 编辑器内部线程异常。
- 报错来自:
huawei.histudio.cpp.completion(C++ 代码补全插件) - 执行线程:
DefaultDispatcher-worker(后台工作线程) - 禁止操作:后台线程直接读取 PSI 文件
- 官方要求:所有模型读写必须包裹在
ReadAction中
给你2个解决方法,可以参考下:
方法 1:清除缓存并重启
- 关闭 Deveco Studio
- 删除项目根目录下的:
.idea文件夹xxx.iml文件
- 打开软件 → 顶部菜单File → Repair IDE → 依次执行所有修复步骤或直接用:File → Invalidate Caches…
- 勾选:
- Clear file system cache and local history
- Clear downloaded shared indexes
- 点击 Invalidate and Restart
方法 2:禁用 / 重启 C++ 相关插件
报错是 C++ 代码补全插件 抛出的:
- 打开
File → Settings → Plugins - 搜索 C++ / Native / Histudio Cpp
- 禁用非必要的 C++ 相关插件 → 重启软件
CppCompletionContributor这是java写的C/C++辅助编码的工具吧,checkRemoveSpaces这个方法引起的主线程(一般UI线程)干了费时费力的事情(log显示读操作)导致了bug。
你是不是开启了哪个AI助手辅助代码编辑了,DevEco是基于idea的,idea这种大IDE都是并发线程跑插件或工具的,保不准哪个不必要的工具出错。
不想更换其他版本DevEco或更新IDE,可以看看CodeGenie或你自己装的AI助手或其他辅助编码工具,调调配置。
应该是 DevEvo Studio 内部插件触发的 IDE 异常,准确说是基于 IntelliJ 平台的线程访问错误。
引发这类问题的可能场景:
- IDE 某个插件实现有 bug
- DevEco 版本和内置插件版本存在兼容性问题
- 打开项目、索引、补全触发时偶发踩到线程时序问题
尝试解决方案:
- 升级 DevEco Studio 到最新稳定版
- 清缓存并重建索引尝试:File -> Invalidate Caches / Restart
- 因为这是 IDE 内部异常,可以提交工单反馈:在线提单
此异常的根本原因是违反了IntelliJ平台的线程访问规则。平台要求所有对内部数据模型(如PSI、虚拟文件系统等)的读取操作,都必须在显式声明的“读操作”(Read Action)上下文中执行。您提供的堆栈信息显示,一个后台工作线程(DefaultDispatcher-worker-47)试图直接访问PSI文件结构,但没有被包裹在 Application.runReadAction()或类似的保护块中,从而触发了此异常。这个错误是开发环境底层框架对资源访问的一种安全保护机制。对于大多数鸿蒙开发者而言,通过重启或更新IDE即可解决
DevEco Studio报错通常与配置、SDK路径、签名或 Gradle 同步失败有关。请检查工程设置 build.gradle 文件中的版本号是否匹配已安装的 SDK,确认签名证书信息正确,确保网络可访问鸿蒙仓库并清理缓存后重新同步。若为运行时错误,请核对代码中 API 调用是否符合鸿蒙 API 规范。
这是 DevEco Studio(基于 IntelliJ 平台)内部的线程访问异常。后台协程线程 DefaultDispatcher-worker-47 在无读锁的情况下直接访问了 PSI 文件树,触发了 IntelliJ 的线程断言。触发点在 C++ 代码补全逻辑 CppCompletionContributor.checkRemoveSpaces,属于 C/C++ 补全功能的一个内部缺陷。
该错误不影响正常编辑和编译,因为异常被框架捕获并弹窗提示,但未破坏数据。可以尝试以下操作消除提示:点击 File → Invalidate Caches… → Invalidate and Restart 清理缓存后重启。若问题依旧,这通常表示当前使用的 DevEco Studio 版本中 C++ 补全组件存在线程安全隐患,更新至最新版本往往能修复。无需手动开启或关闭任何权限,也不是你的代码错误。

