启动JConsole时抛出空指针异常问题求助
JConsole启动触发NullPointerException的解决办法
问题详情
启动JConsole时弹出空指针异常对话框,关闭后点击「连接->新建连接」仍会报错。当前环境信息:
- Java版本:Amazon Corretto 11.0.20_8
- 路径验证结果:
where java返回:C:\Program Files\Amazon Corretto\jdk11.0.20_8\bin\java.exewhere jconsole返回:C:\Program Files\Amazon Corretto\jdk11.0.20_8\bin\jconsole.exe
- 已尝试操作:手动创建了缺失的
C:\Users\myname\AppData\Local\Temp\hsperfdata_myname文件夹,但问题未解决。
异常栈信息:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at jdk.internal.jvmstat/sun.jvmstat.perfdata.monitor.protocol.local.LocalVmManager.activeVms(LocalVmManager.java:150) at jdk.internal.jvmstat/sun.jvmstat.perfdata.monitor.protocol.local.MonitoredHostProvider.activeVms(MonitoredHostProvider.java:150) at jdk.jconsole/sun.tools.jconsole.LocalVirtualMachine.getMonitoredVMs(LocalVirtualMachine.java:132) at jdk.jconsole/sun.tools.jconsole.LocalVirtualMachine.getAllVirtualMachines(LocalVirtualMachine.java:122) at jdk.jconsole/sun.tools.jconsole.ConnectDialog$ManagedVmTableModel.refresh(ConnectDialog.java:697) at jdk.jconsole/sun.tools.jconsole.ConnectDialog$ManagedVmTableModel.<init>(ConnectDialog.java:687) at jdk.jconsole/sun.tools.jconsole.ConnectDialog.<init>(ConnectDialog.java:121) at jdk.jconsole/sun.tools.jconsole.JConsole.showConnectDialog(JConsole.java:616) at jdk.jconsole/sun.tools.jconsole.JConsole$6.run(JConsole.java:829) at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
解决步骤
1. 修复hsperfdata目录权限
手动创建文件夹后,需确保当前用户对C:\Users\myname\AppData\Local\Temp\hsperfdata_myname拥有完全控制权限:
- 右键文件夹 → 属性 → 安全 → 编辑 → 选中当前用户 → 勾选「完全控制」 → 应用并确认。
2. 以管理员身份启动JConsole
右键点击jconsole.exe,选择「以管理员身份运行」。系统权限限制可能导致JConsole无法读写perfdata目录。
3. 校验临时目录环境变量
检查TEMP和TMP环境变量是否指向正确路径:
- 打开命令提示符,执行
echo %TEMP%和echo %TMP%,确认输出为C:\Users\myname\AppData\Local\Temp。 - 若路径错误,右键「此电脑」→ 属性 → 高级系统设置 → 环境变量,修改用户变量中的
TEMP和TMP值。
4. 重建hsperfdata目录
- 删除手动创建的
hsperfdata_myname文件夹。 - 打开命令提示符,执行
mkdir "%TEMP%\hsperfdata_myname",用系统命令重新创建目录,避免手动创建的权限问题。 - 重启JConsole。
5. 排查多Java环境干扰
确保系统无其他Java版本残留:
- 执行
java -version和jconsole -version,确认输出均为Amazon Corretto 11.0.20_8。 - 若有其他版本,卸载后清理
JAVA_HOME和Path环境变量,仅保留当前Corretto路径。
6. 手动指定进程ID连接
若上述方法无效,可跳过自动发现,直接手动连接目标JVM:
- 打开命令提示符,执行
jps -l获取当前运行的Java进程ID。 - 启动JConsole,选择「远程进程」,输入
localhost:<进程ID>后点击连接。
内容的提问来源于stack exchange,提问作者Donut
相关产品推荐
相关产品推荐

