运行DevEco Studio软件,提示插件OpenHarmonySupp中的2个异常
运行DevEco Studio软件,提示插件OpenHarmonySupp中的2个异常 运行DevEco Studio软件,提示插件OpenHarmonySupp中的2个异常。是什么导致的呢?如何解决?
异常1:
java.lang.Throwable: oshi.driver.windows.registry.HkeyPerformanceDataUtil <clinit> requests com.intellij.ide.plugins.PluginUtil instance. Class initialization must not depend on services. Consider using instance of the service on-demand instead.
at com.intellij.openapi.diagnostic.Logger.error(Logger.java:376) at com.intellij.serviceContainer.ComponentManagerImplKt.checkOutsideClassInitializer(ComponentManagerImpl.kt:1586) at com.intellij.serviceContainer.ComponentManagerImplKt.getOrCreateInstanceBlocking(ComponentManagerImpl.kt:1555) at com.intellij.serviceContainer.ComponentManagerImpl.doGetService(ComponentManagerImpl.kt:751) at com.intellij.serviceContainer.ComponentManagerImpl.getService(ComponentManagerImpl.kt:695) at com.intellij.ide.plugins.PluginUtil.getInstance(PluginUtil.java:14) at com.intellij.diagnostic.DefaultIdeaErrorLogger.canHandle(DefaultIdeaErrorLogger.java:41) at com.intellij.diagnostic.DialogAppender.queueAppend(DialogAppender.kt:76) at com.intellij.diagnostic.DialogAppender.publish(DialogAppender.kt:48) at java.logging/java.util.logging.Logger.log(Logger.java:983) at org.slf4j.jul.JDK14LoggerAdapter.innerNormalizedLoggingCallHandler(JDK14LoggerAdapter.java:156) at org.slf4j.jul.JDK14LoggerAdapter.handleNormalizedLoggingCall(JDK14LoggerAdapter.java:140) at org.slf4j.helpers.AbstractLogger.handle_0ArgsCall(AbstractLogger.java:382) at org.slf4j.helpers.AbstractLogger.error(AbstractLogger.java:347) at oshi.driver.windows.registry.HkeyPerformanceDataUtil.mapCounterIndicesFromRegistry(HkeyPerformanceDataUtil.java:280) at oshi.driver.windows.registry.HkeyPerformanceDataUtil.<clinit>(HkeyPerformanceDataUtil.java:51) at oshi.driver.windows.registry.ProcessPerformanceData.buildProcessMapFromRegistry(ProcessPerformanceData.java:45) at oshi.software.os.windows.WindowsOperatingSystem.queryProcessMapFromRegistry(WindowsOperatingSystem.java:315) at oshi.util.Memoizer$1.get(Memoizer.java:61) at oshi.software.os.windows.WindowsOperatingSystem.processMapToList(WindowsOperatingSystem.java:285) at oshi.software.os.windows.WindowsOperatingSystem.queryAllProcesses(WindowsOperatingSystem.java:244) at oshi.software.common.AbstractOperatingSystem.getProcesses(AbstractOperatingSystem.java:86) at oshi.software.os.OperatingSystem.getProcesses(OperatingSystem.java:154) at com.huawei.deveco.operationmodel.util.ProcessUtil.buildProcessTree(ProcessUtil.java:123) at com.huawei.deveco.operationmodel.util.DFXMemoryUtil.<init>(DFXMemoryUtil.java:60) at com.huawei.deveco.operationmodel.util.DFXMemoryUtil.getInstance(DFXMemoryUtil.java:69) at com.huawei.deveco.diagnostic.watcher.MemoryWatcher.run(MemoryWatcher.java:70) at com.huawei.deveco.diagnostic.watcher.SingleThreadLockRunnable.run(SingleThreadLockRunnable.java:46) at com.intellij.util.concurrency.Propagation$capturePropagationContext$$inlined$Runnable$1.run(Runnable.kt:17) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358) at com.intellij.util.concurrency.SchedulingWrapper$MyScheduledFutureTask.run(SchedulingWrapper.java:275) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:735) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:732) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:732) at java.base/java.lang.Thread.run(Thread.java:1583)
Unable to locate English counter names in registry Perflib 009. Counters may need to be rebuilt:
com.sun.jna.platform.win32.Win32Exception: 系统找不到指定的文件。
at com.sun.jna.platform.win32.Advapi32Util.registryGetStringArray(Advapi32Util.java:949) at com.sun.jna.platform.win32.Advapi32Util.registryGetStringArray(Advapi32Util.java:924) at com.sun.jna.platform.win32.Advapi32Util.registryGetStringArray(Advapi32Util.java:898) at oshi.driver.windows.registry.HkeyPerformanceDataUtil.mapCounterIndicesFromRegistry(HkeyPerformanceDataUtil.java:274) at oshi.driver.windows.registry.HkeyPerformanceDataUtil.<clinit>(HkeyPerformanceDataUtil.java:51) at oshi.driver.windows.registry.ProcessPerformanceData.buildProcessMapFromRegistry(ProcessPerformanceData.java:45) at oshi.software.os.windows.WindowsOperatingSystem.queryProcessMapFromRegistry(WindowsOperatingSystem.java:315) at oshi.util.Memoizer$1.get(Memoizer.java:61) at oshi.software.os.windows.WindowsOperatingSystem.processMapToList(WindowsOperatingSystem.java:285) at oshi.software.os.windows.WindowsOperatingSystem.queryAllProcesses(WindowsOperatingSystem.java:244) at oshi.software.common.AbstractOperatingSystem.getProcesses(AbstractOperatingSystem.java:86) at oshi.software.os.OperatingSystem.getProcesses(OperatingSystem.java:154) at com.huawei.deveco.operationmodel.util.ProcessUtil.buildProcessTree(ProcessUtil.java:123) at com.huawei.deveco.operationmodel.util.DFXMemoryUtil.<init>(DFXMemoryUtil.java:60) at com.huawei.deveco.operationmodel.util.DFXMemoryUtil.getInstance(DFXMemoryUtil.java:69) at com.huawei.deveco.diagnostic.watcher.MemoryWatcher.run(MemoryWatcher.java:70) at com.huawei.deveco.diagnostic.watcher.SingleThreadLockRunnable.run(SingleThreadLockRunnable.java:46) at com.intellij.util.concurrency.Propagation$capturePropagationContext$$inlined$Runnable$1.run(Runnable.kt:17) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358) at com.intellij.util.concurrency.SchedulingWrapper$MyScheduledFutureTask.run(SchedulingWrapper.java:275) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:735) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:732) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:732) at java.base/java.lang.Thread.run(Thread.java:1583)
异常2:
Unable to locate English counter names in registry Perflib 009. Counters may need to be rebuilt:
com.sun.jna.platform.win32.Win32Exception: 系统找不到指定的文件。
at com.sun.jna.platform.win32.Advapi32Util.registryGetStringArray(Advapi32Util.java:949) at com.sun.jna.platform.win32.Advapi32Util.registryGetStringArray(Advapi32Util.java:924) at com.sun.jna.platform.win32.Advapi32Util.registryGetStringArray(Advapi32Util.java:898) at oshi.driver.windows.registry.HkeyPerformanceDataUtil.mapCounterIndicesFromRegistry(HkeyPerformanceDataUtil.java:274) at oshi.driver.windows.registry.HkeyPerformanceDataUtil.<clinit>(HkeyPerformanceDataUtil.java:51) at oshi.driver.windows.registry.ProcessPerformanceData.buildProcessMapFromRegistry(ProcessPerformanceData.java:45) at oshi.software.os.windows.WindowsOperatingSystem.queryProcessMapFromRegistry(WindowsOperatingSystem.java:315) at oshi.util.Memoizer$1.get(Memoizer.java:61) at oshi.software.os.windows.WindowsOperatingSystem.processMapToList(WindowsOperatingSystem.java:285) at oshi.software.os.windows.WindowsOperatingSystem.queryAllProcesses(WindowsOperatingSystem.java:244) at oshi.software.common.AbstractOperatingSystem.getProcesses(AbstractOperatingSystem.java:86) at oshi.software.os.OperatingSystem.getProcesses(OperatingSystem.java:154) at com.huawei.deveco.operationmodel.util.ProcessUtil.buildProcessTree(ProcessUtil.java:123) at com.huawei.deveco.operationmodel.util.DFXMemoryUtil.<init>(DFXMemoryUtil.java:60) at com.huawei.deveco.operationmodel.util.DFXMemoryUtil.getInstance(DFXMemoryUtil.java:69) at com.huawei.deveco.diagnostic.watcher.MemoryWatcher.run(MemoryWatcher.java:70) at com.huawei.deveco.diagnostic.watcher.SingleThreadLockRunnable.run(SingleThreadLockRunnable.java:46) at com.intellij.util.concurrency.Propagation$capturePropagationContext$$inlined$Runnable$1.run(Runnable.kt:17) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358) at com.intellij.util.concurrency.SchedulingWrapper$MyScheduledFutureTask.run(SchedulingWrapper.java:275) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:735) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:732) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:732) at java.base/java.lang.Thread.run(Thread.java:1583)
已解决。系统性能计算器有异常,重新创建即可
DevEco Studio插件OpenHarmonySupp异常通常由插件版本不匹配或IDE环境问题导致。请检查DevEco Studio是否为最新版本,并确认OpenHarmonySupp插件与当前IDE版本兼容。可尝试在设置中禁用并重新启用该插件,或通过插件市场重新安装。若问题持续,建议清理IDE缓存并重启。
这两个异常的根本原因是相同的:DevEco Studio(基于IntelliJ IDEA)在启动时,其内部依赖的OSHI库尝试访问Windows性能计数器注册表项 Perflib 009 以获取进程信息时失败。异常1是一个关于插件服务初始化的警告,异常2是具体的“找不到文件”错误。
原因分析:
- 核心问题:Windows注册表中的性能计数器信息(
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009)可能损坏或丢失。这通常发生在某些系统优化软件清理了注册表,或者系统本身存在异常。 - 触发场景:DevEco Studio启动时,其内存监控组件(
MemoryWatcher)会调用OSHI库来获取系统进程列表。OSHI库在初始化HkeyPerformanceDataUtil类时,会尝试读取上述注册表路径来映射性能计数器名称。当该注册表项不存在或无法访问时,就会抛出Win32Exception: 系统找不到指定的文件。 - 异常1的性质:第一个堆栈顶部的
Throwable更多是一个框架层面的编程约束警告(提示不应在类初始化静态块中依赖插件服务实例),它是由后续真正的读取失败所触发并记录日志时产生的。问题的根源还是读取失败。
解决方案: 此问题属于Windows系统环境问题,而非DevEco Studio或HarmonyOS SDK本身的代码缺陷。可以尝试以下方法修复:
方法一:重建Windows性能计数器(推荐) 这是最根本的解决方法。以管理员身份打开命令提示符(CMD)或PowerShell,依次执行以下命令:
lodctr /R
winmgmt /RESYNCPERF
执行完毕后重启计算机。这会命令Windows重新构建性能计数器注册表信息。
方法二:手动检查/修复注册表项
- 按
Win + R,输入regedit打开注册表编辑器。 - 导航到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib。 - 检查是否存在
009子项。同时查看CurrentLanguage的数值数据,例如中文系统可能是0804。 - 如果
009缺失,可以尝试从另一台同版本、同语言的正常Windows电脑导出该子项,然后合并到你的注册表中(操作注册表有风险,请提前备份)。
方法三:暂时禁用相关监控(临时规避)
如果上述方法无效,且DevEco Studio主体功能(如代码编辑、编译、运行)正常,仅弹出此错误提示,可以尝试在DevEco Studio的配置文件(idea.properties,位于安装目录的bin文件夹下)末尾添加一行:
disable.watchers=true
这会禁用内部的一些监控线程,可能使错误不再弹出。但这只是一个临时规避措施,并非修复。
总结:优先使用方法一,即通过管理员命令重建性能计数器。绝大多数情况下,此操作可以解决问题。如果问题依旧,再考虑方法二或方法三。该异常通常不影响DevEco Studio的核心开发功能。

