說明
我是使用的的是gnu的rxtx comm包以及librxtxSerial.so來進行序列槽通信。so檔案需要根據你的系統來進行選擇。否則在程式運作時會提示錯誤。
各系統版本依賴包
配置
- Java路徑配置
cat /etc/profile
确定兩個檔案下的CLASSPATH配置過 J A V A H O M E / j r e / l i b 和 P A T H 配 置 過 JAVA_HOME/jre/lib 和PATH配置過 JAVAHOME/jre/lib和PATH配置過JAVA_HOME/jre/lib,如果沒配置上,請加上,否則會程式運作時會找不到相應的依賴包cat /etc/profile.d/java.sh
- 序列槽權限
将如下2段修改為(沒有需新增):vi /etc/group
uucp:x:14:uucp 修改為:uucp:x:14:uucp,afc
lock:x:54: 修改為:lock:x:54:afc
-
選擇依賴包
JDK是32位,選擇i686-unknown-linux-gnu目錄;
JDK是64位和作業系統是IA-64時,選擇ia64-unkown-linux-gnu目錄;
JDK是64位和作業系統是x86_64時,選擇x86_64-unknown-linux-gnu目錄,把目錄中的檔案拷貝到/usr/java/jdk1.8.0_152/jre/lib/amd64;
拷貝RXTXcomm.jar檔案放在 /usr/java/jdk1.8.0_152/jre/lib/amd64/ext下
配置例子
因為我是x86_64以及64位的jdk是以的我配置如下圖:

如果選錯了依賴包,或者是放置錯了路徑,會出現如下提示:
- 選錯依賴包
[ ]$java -classpath . SerialTest
Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /usr/java/jdk1.8.0_152/jre/lib/amd64/librxtxSerial.so which might have disabled stack guard. The VM will try to fix the stack guard now.
It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
java.lang.UnsatisfiedLinkError: /usr/java/jdk1.8.0_152/jre/lib/amd64/librxtxSerial.so: /usr/java/jdk1.8.0_152/jre/lib/amd64/librxtxSerial.so: 無法打開共享對象檔案: 沒有那個檔案或目錄 (Possible cause: can't load IA 64-bit .so on a AMD 64-bit platform) thrown while loading gnu.io.RXTXCommDriver
Exception in thread "main" java.lang.UnsatisfiedLinkError: /usr/java/jdk1.8.0_152/jre/lib/amd64/librxtxSerial.so: /usr/java/jdk1.8.0_152/jre/lib/amd64/librxtxSerial.so: 無法打開共享對象檔案: 沒有那個檔案或目錄 (Possible cause: can't load IA 64-bit .so on a AMD 64-bit platform)
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1845)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83)
at SerialTest.main(SerialTest.java:29)
- 路徑錯誤
[ ]$ java -classpath . SerialTest
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(ClassLoader.java:1867)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83)
at SerialTest.main(SerialTest.java:29)
[[email protected] APP]$
- 權限錯誤
check_group_uucp(): error testing lock file creation Error details:權限不夠check_lock_status: No permission to create lock file.
please see: How can I use Lock Files with rxtx? in INSTALL
測試源碼
- SerialTest
import java.util.Enumeration;
import gnu.io.CommPortIdentifier;
public class SerialTest {
public static void main(String[] args) {
try {
Enumeration portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement();
System.out.println("擷取到的序列槽名稱為:COM" + portId.getPortType());
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
- ShowJvmBit
import java.io.PrintStream;
public class ShowJvmBit
{
public static void main(String[] paramArrayOfString)
{
String str = System.getProperty("sun.arch.data.model");
System.out.println("This JVM is " + str + "-bit");
}
}