Java程序抛出java.lang.UnsatisfiedLinkError: no jSerialComm问题求助
问题现象
勾选特定选项后Java程序抛出异常,否则可正常运行并输出预期结果;JavaFX项目中使用同一jar包也出现运行报错。
详情
需要通过串口(SerialPort)与设备通信,之前因RxTx库存在bug切换至jSerialComm库,按官方说明完成配置后,程序虽能启动但抛出异常,影响预期输出。
异常信息
java.lang.UnsatisfiedLinkError: no jSerialComm in java.library.path: C:\Program Files\Eclipse Adoptium\jdk-21.0.1.12-hotspot\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\WindowsApps\Microsoft.PowerShell_7.4.0.0_x64__8wekyb3d8bbwe;C:\Program Files\Eclipse Adoptium\jdk-21.0.1.12-hotspot\bin;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Program Files\Eclipse Adoptium\jdk-17.0.8.101-hotspot\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;C:\WINDOWS\System32\OpenSSH;C:\Program Files\Maven\apache-maven-3.9.5\bin;C:\Users\Toobaa.khan\AppData\Local\Microsoft\WindowsApps;;C:\Users\Toobaa.khan\AppData\Local\Programs\Microsoft VS Code\bin;.
使用的库
jSerialComm-2.10.4.jar
已尝试的解决方法
- 将jar文件放置到
C:\Program Files\Eclipse Adoptium\jdk-21.0.1.12-hotspot\bin路径 - 将jar文件放置到
C:\Users\Toobaa.khan\AppData\Local\Microsoft\WindowsApps和C:\Users\Toobaa.khan\AppData\Local\Programs\Microsoft VS Code\bin路径
以上操作后仍出现相同错误。
补充信息
开发平台:Visual Studio Code
pom.xml配置内容
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>app.creatingpdfs</groupId> <artifactId>projectcreatepdfs</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>13</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>13</version> </dependency> <dependency> <groupId>com.fazecast</groupId> <artifactId>jSerialComm</artifactId> <version>[2.10.3,2.10.4]</version> </dependency> <dependency> <groupId>com.aspose.pdf</groupId> <artifactId>aspose-pdf</artifactId> <version>23.1</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <release>1.8</release> </configuration> </plugin> <plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.6</version> <executions> <execution> <!-- Default configuration for running --> <!-- Usage: mvn clean javafx:run --> <id>default-cli</id> <configuration> <mainClass>app.creatingpdfs.App</mainClass> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
解决方案
- 处理JNI本地库依赖:jSerialComm是JNI库,仅放置jar包无效,需确保对应平台的本地库文件(Windows下为
jSerialComm.dll)被正确加载。Maven引入的jSerialComm jar包内已包含各平台本地库,无需手动复制,但要保证依赖完整下载。 - 添加JVM运行参数:在VS Code运行配置或Maven插件中指定
-Djava.library.path参数。修改javafx-maven-plugin配置示例:
<plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.6</version> <executions> <execution> <id>default-cli</id> <configuration> <mainClass>app.creatingpdfs.App</mainClass> <jvmArgs> <jvmArg>-Djava.library.path=${project.basedir}/target/classes</jvmArg> </jvmArgs> </configuration> </execution> </executions> </plugin>
- 统一JDK版本:pom.xml指定编译版本为1.8,但实际使用JDK21,存在兼容性风险。建议将
maven.compiler.source、maven.compiler.target和release参数统一改为21,或更换为与JavaFX13匹配的JDK(如JDK11/13)。 - 清理Maven缓存:执行
mvn clean install -U命令,强制更新依赖,确保jSerialComm库完整下载。
内容的提问来源于stack exchange,提问作者Bea K.

