java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading g

本文针对使用Java进行串口通信时遇到的问题提供了详细的解决方案,包括处理rxtxSerial.dll和win32com.dll加载失败的情况,适用于Win7 64位系统。

问题:在利用Java编写读取串口的程序时,遇到好多问题,在此记录一下:

1、ERROR: java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver

Exception in thread "main" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
 at java.lang.ClassLoader.loadLibrary(Unknown Source)
 at java.lang.Runtime.loadLibrary0(Unknown Source)
 at java.lang.System.loadLibrary(Unknown Source)
 at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83)
 at com.three.rxtx.SimpleRead.main(SimpleRead.java:86)

解决办法:

把rxtxSerial.dll 放到%JAVA_HOME%/bin (注意,不是rxtxSerial64.dll 。不过我也不是很清楚这两个dll的区别)

备注:

rxtxSerial.dll 要下对版本,有AMD和Intel版的。

系统:win7 64位

JAVA库:RXTX(提供串口和并口通信的开源java类库)

2、操作系统是win7 专业版64位,用java实现串口通信,出现的问题:Error loading win32com: java.lang.UnsatisfiedLinkError: C:\Program Files\Java\jdk1.6.0_43\jre\bin\win32com.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform

解决方案:dll 是32位得把 win32com.dll错误提示,换 64位的 dll ,但是没有没有 64位 的 win32com.dll,在64位的操作系统中安装 32位的jdk 然后,在使用这个32位的dll 就好了






我希望你充当java开发专家,教我分析下面的异常:java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path: [C:\Program Files\Java\jdk-12.0.2\bin, C:\Windows\Sun\Java\bin, C:\Windows\system32, C:\Windows, C:\Windows\system32, C:\Windows, C:\Windows\System32\Wbem, C:\Windows\System32\WindowsPowerShell\v1.0\, C:\Windows\System32\OpenSSH\, C:\Program Files\Git\cmd, C:\Program Files\TortoiseGit\bin, C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common, C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR, C:\Program Files (x86)\IncrediBuild, C:\Program Files\Java\jdk-12.0.2\bin, C:\Program Files\Java\jdk-12.0.2\jre\bin, C:\mysql-8.0.30-winx64\bin, C:\Program Files\TortoiseSVN\bin, C:\Program Files\nodejs\, C:\Qt\Qt5.12.11\5.12.11\msvc2017_64\bin, C:\Users\admin\AppData\Local\Microsoft\WindowsApps, ., C:\Users\admin\AppData\Local\Programs\Microsoft VS Code\bin, C:\Program Files\JetBrains\IntelliJ IDEA 2021.3.3\bin, ., C:\Users\admin\AppData\Roaming\npm, C:\Program Files\JetBrains\WebStorm 2021.3.3\bin, ., .] thrown while loading gnu.io.RXTXCommDriver Exception in thread "main" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path: [C:\Program Files\Java\jdk-12.0.2\bin, C:\Windows\Sun\Java\bin, C:\Windows\system32, C:\Windows, C:\Windows\system32, C:\Windows, C:\Windows\System32\Wbem, C:\Windows\System32\WindowsPowerShell\v1.0\, C:\Windows\System32\OpenSSH\, C:\Program Files\Git\cmd, C:\Program Files\TortoiseGit\bin, C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common, C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR, C:\Program Files (x86)\IncrediBuild, C:\Program Files\Java\jdk-12.0.2\bin, C:\Program Files\Java\jdk-12.0.2\jre\bin, C:\mysql-8.0.30-winx64\bin, C:\Program Files\TortoiseSVN\bin, C:\Program Files\nodejs\, C:\Qt\Qt5.12.11\5.12.11\msvc2017_64\bin, C:\Users\admin\AppData\Local\Microsoft\WindowsApps, ., C:\Users\admin\AppData\Local\Programs\Microsoft VS Code\bin, C:\Program Files\JetBrains\IntelliJ IDEA 2021.3.3\bin, ., C:\Users\admin\AppData\Roaming\npm, C:\Program Files\JetBrains\WebStorm 2021.3.3\bin, ., .] at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2660) at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:827) at java.base/java.lang.System.loadLibrary(System.java:1902) at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83) at SerialComm.searchForPorts(SerialComm.java:29) at SerialComm.main(SerialComm.java:24)
05-30
`java.lang.UnsatisfiedLinkError: no FCCJavaClientProxyv16064 in java.library.path` 异常表明 Java 无法在 `java.library.path` 指定的路径中找到名为 `FCCJavaClientProxyv16064.dll` 的本地库文件。尽管该 DLL 文件可能存在于系统中,但由于多种原因,JVM 无法正确加载它。以下是解决此问题的详细方法: ### 1. 确认 `java.library.path` 的值 首先,打印当前运行时的 `java.library.path` 值,以确认 JVM 实际搜索的路径: ```java System.out.println("java.library.path: " + System.getProperty("java.library.path")); ``` 该路径通常包括系统环境变量 `PATH` 中的目录。确保 `FCCJavaClientProxyv16064.dll` 所在的目录包含在其中。 ### 2. 将 DLL 文件所在目录添加到 `java.library.path` 如果 DLL 文件不在默认的 `java.library.path` 中,可以通过启动参数手动指定路径: ```bash java -Djava.library.path="C:\path\to\dll" -jar yourApp.jar ``` 其中 `C:\path\to\dll` 是 `FCCJavaClientProxyv16064.dll` 所在的目录。 ### 3. 使用 `System.load()` 替代 `System.loadLibrary()` 如果无法将 DLL 所在路径加入 `java.library.path`,可以使用绝对路径加载 DLL: ```java System.load("C:\\full\\path\\to\\FCCJavaClientProxyv16064.dll"); ``` 这种方式绕过了 `java.library.path` 的限制,适用于调试或部署时路径固定的场景。 ### 4. 检查 DLL 文件的兼容性 确保 `FCCJavaClientProxyv16064.dll` 与当前 JVM 的架构匹配(即 64 位 JVM 需要 64 位 DLL,32 位 JVM 需要 32 位 DLL)。 ### 5. 检查 DLL 文件是否依赖其他库 使用工具如 [Dependency Walker](http://www.dependencywalker.com/) 检查 `FCCJavaClientProxyv16064.dll` 是否缺少依赖项。如果存在缺失的依赖库,即使 DLL 本身存在,也无法加载。 ### 6. 设置系统环境变量 `PATH` 将 DLL 所在目录添加到系统的 `PATH` 环境变量中。这样 JVM 在查找本地库时会自动包含该路径。 ### 7. 检查文件权限和路径中的空格/特殊字符 确保 JVM 有权限访问该 DLL 文件,并且路径中没有非法字符或空格。建议使用短路径(如 `C:\dlls`)以避免问题。 ### 示例代码:加载本地库 ```java public class NativeLoader { static { // 方法一:使用 loadLibrary(需确保 dll 在 java.library.path 中) System.loadLibrary("FCCJavaClientProxyv16064"); // 方法二:使用绝对路径加载 // System.load("C:\\dlls\\FCCJavaClientProxyv16064"); } public native void someNativeMethod(); public static void main(String[] args) { new NativeLoader().someNativeMethod(); } } ``` ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值