运行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)


3 回复

已解决。系统性能计算器有异常,重新创建即可


DevEco Studio插件OpenHarmonySupp异常通常由插件版本不匹配或IDE环境问题导致。请检查DevEco Studio是否为最新版本,并确认OpenHarmonySupp插件与当前IDE版本兼容。可尝试在设置中禁用并重新启用该插件,或通过插件市场重新安装。若问题持续,建议清理IDE缓存并重启。

这两个异常的根本原因是相同的:DevEco Studio(基于IntelliJ IDEA)在启动时,其内部依赖的OSHI库尝试访问Windows性能计数器注册表项 Perflib 009 以获取进程信息时失败。异常1是一个关于插件服务初始化的警告,异常2是具体的“找不到文件”错误。

原因分析:

  1. 核心问题:Windows注册表中的性能计数器信息(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009)可能损坏或丢失。这通常发生在某些系统优化软件清理了注册表,或者系统本身存在异常。
  2. 触发场景:DevEco Studio启动时,其内存监控组件(MemoryWatcher)会调用OSHI库来获取系统进程列表。OSHI库在初始化HkeyPerformanceDataUtil类时,会尝试读取上述注册表路径来映射性能计数器名称。当该注册表项不存在或无法访问时,就会抛出 Win32Exception: 系统找不到指定的文件
  3. 异常1的性质:第一个堆栈顶部的 Throwable 更多是一个框架层面的编程约束警告(提示不应在类初始化静态块中依赖插件服务实例),它是由后续真正的读取失败所触发并记录日志时产生的。问题的根源还是读取失败。

解决方案: 此问题属于Windows系统环境问题,而非DevEco Studio或HarmonyOS SDK本身的代码缺陷。可以尝试以下方法修复:

方法一:重建Windows性能计数器(推荐) 这是最根本的解决方法。以管理员身份打开命令提示符(CMD)或PowerShell,依次执行以下命令:

lodctr /R
winmgmt /RESYNCPERF

执行完毕后重启计算机。这会命令Windows重新构建性能计数器注册表信息。

方法二:手动检查/修复注册表项

  1. Win + R,输入 regedit 打开注册表编辑器。
  2. 导航到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib
  3. 检查是否存在 009 子项。同时查看 CurrentLanguage 的数值数据,例如中文系统可能是 0804
  4. 如果 009 缺失,可以尝试从另一台同版本、同语言的正常Windows电脑导出该子项,然后合并到你的注册表中(操作注册表有风险,请提前备份)。

方法三:暂时禁用相关监控(临时规避) 如果上述方法无效,且DevEco Studio主体功能(如代码编辑、编译、运行)正常,仅弹出此错误提示,可以尝试在DevEco Studio的配置文件(idea.properties,位于安装目录的bin文件夹下)末尾添加一行:

disable.watchers=true

这会禁用内部的一些监控线程,可能使错误不再弹出。但这只是一个临时规避措施,并非修复。

总结:优先使用方法一,即通过管理员命令重建性能计数器。绝大多数情况下,此操作可以解决问题。如果问题依旧,再考虑方法二或方法三。该异常通常不影响DevEco Studio的核心开发功能。

回到顶部