创建ChronicleMap时遇ChronicleHashRecoveryFailedException错误求助
解决Chronicle Map
createOrRecoverPersistedTo 抛出的UnsatisfiedLinkError 问题 你遇到的问题核心是:Chronicle Map在Windows 10+Java 11环境下调用恢复持久化文件的方法时,依赖的JNA(Java Native Access)无法加载本地库,找不到系统级依赖。而create方法正常是因为它不需要处理已存在的持久化文件的底层系统同步操作,避开了JNA的这个加载流程。下面是几个针对性的解决方案:
1. 安装Visual C++ Redistributable运行时库
这个错误最常见的根源是Windows系统缺少JNA本地库依赖的Visual C++ Redistributable for Visual Studio运行时。Chronicle Map依赖的JNA库需要VC++ 2015-2022版本的运行时支持:
- 下载对应你系统架构(x64/x86)的安装包完成安装,之后重启程序再测试。
2. 清理JNA临时文件
错误日志里提到的C:\Users\sando\AppData\Local\Temp\jna-*目录下的临时DLL文件可能已损坏,或是加载权限出了问题:
- 手动删除所有以
jna-开头的临时文件夹; - 重启你的Java程序,JNA会重新生成正确的本地库文件。
3. 显式指定兼容Java 11的JNA版本
Chronicle Map 3.19.4默认依赖的JNA版本可能和Java 11存在兼容冲突,你可以在pom.xml中显式声明更高版本的JNA依赖,覆盖默认版本:
<dependencies> <!-- 保留原Chronicle Map依赖 --> <dependency> <groupId>net.openhft</groupId> <artifactId>chronicle-map</artifactId> <version>3.19.4</version> </dependency> <!-- 显式指定兼容Java 11的JNA稳定版本 --> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>5.13.0</version> </dependency> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna-platform</artifactId> <version>5.13.0</version> </dependency> </dependencies>
4. 检查文件与目录权限
确保你的程序对以下路径有完整的读写权限:
- 持久化文件所在目录:
D:\trabajo\dbpedia\dbpedia_files\ - Windows临时目录:
C:\Users\sando\AppData\Local\Temp\
权限不足可能导致JNA无法生成临时库文件,或是Chronicle Map无法正确恢复持久化数据。
5. 升级Chronicle Map到最新稳定版
3.19.4是一个发布于2020年的老旧版本,后续版本修复了不少Windows平台的兼容性问题。你可以尝试升级到最新的稳定版本(比如3.25.22),新版本对Java 11的支持更完善,依赖的JNA版本也更适配:
<dependency> <groupId>net.openhft</groupId> <artifactId>chronicle-map</artifactId> <version>3.25.22</version> </dependency>
建议按顺序尝试以上方案,通常前两个步骤就能解决问题。如果还是不行,再尝试升级JNA或Chronicle Map版本。
内容的提问来源于stack exchange,提问作者user8954282
相关产品推荐
相关产品推荐

