首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 串口通訊完整範例 (RXTX / jSerialComm)

     編輯:程式設計疑難解答

Java 原生不支援串口,需引入第三方庫。目前主流選擇:

方案一:jSerialComm (純 Java、無需原生 DLL/so、跨平台)

Maven 依賴:

<dependency>
    <groupId>com.fazecast</groupId>
    <artifactId>jSerialComm</artifactId>
    <version>2.10.4</version>
</dependency>

核心程式碼:

import com.fazecast.jSerialComm.*;

public class SerialDemo {
    public static void main(String[] args) {
        SerialPort[] ports = SerialPort.getCommPorts();
        if (ports.length == 0) { System.out.println("無可用串口"); return; }

        SerialPort port = ports[0]; // 選擇第一個
        port.setBaudRate(9600);
        port.setNumDataBits(8);
        port.setNumStopBits(1);
        port.setParity(SerialPort.NO_PARITY);
        port.setFlowControl(SerialPort.FLOW_CONTROL_DISABLED);

        if (!port.openPort()) { System.out.println("開啟失敗"); return; }
        System.out.println("串口已開啟:" + port.getSystemPortName());

        // 發送
        String cmd = "*IDN?\n";
        port.getOutputStream().write(cmd.getBytes());
        port.getOutputStream().flush();

        // 接收 (簡易輪詢,生產環境建議用事件監聽)
        new Thread(() -> {
            byte[] buffer = new byte[1024];
            while (port.isOpen()) {
                int len = port.getInputStream().read(buffer);
                if (len > 0) {
                    System.out.println("收到:" + new String(buffer, 0, len));
                }
            }
        }).start();

        // 測試用:10 秒後關閉
        try { Thread.sleep(10000); } catch (InterruptedException ignored) {}
        port.closePort();
    }
}

方案二:RXTX (舊專案常見,需安裝原生庫)

  • 下載 rxtxSerial.dll (Windows) / librxtxSerial.so (Linux) 放入 java.library.path。
  • 程式碼結構類似,但 API 為 gnu.io.CommPortIdentifier。

關鍵提醒

  1. 權限:Linux 下需將使用者加入 dialout 群組:sudo usermod -a -G dialout $USER。
  2. 埠號衝突:確保無其他程式 (如 Arduino IDE 串口監視器) 佔用該埠。
  3. 讀取策略:避免阻塞式 read() 導致執行緒卡死,使用 addDataListener (jSerialComm) 或獨立執行緒 + 超時機制。

新專案強烈推薦 jSerialComm,部署單一 JAR 即可,無原生庫頭痛問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved