首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 串口通訊開發指南:RXTX 库環境配置與核心類封裝

     編輯:Java 綜合教學

環境準備

  1. 下載 RXTX 檔案:RXTXcomm.jar、rxtxSerial.dll(Windows)或 librxtxSerial.so(Linux)。
  2. 放置位置:
    • RXTXcomm.jar → %JAVA_HOME%/jre/lib/ext/ 並加入專案依賴。
    • rxtxSerial.dll → %JAVA_HOME%/jre/bin/。

核心類設計

1. CommPort 參數實體

public class CommPort {
    private String commPortName;   // COM1, COM2...
    private String ownerName;      // 應用名稱
    private String baudRate;       // 9600, 115200...
    private String dataBit;        // 8
    private String partityBit;     // 0=無, 1=奇, 2=偶
    private String stopBit;        // 1, 1.5, 2
    // getter/setter 略
}

2. CommPortManager 管理器

public class CommPortManager {
    private CommPort commPort;
    private SerialPort serialPort;
    private InputStream in;  private OutputStream out;
    private BufferedReader bufReader; private BufferedWriter bufWriter;
    private DataInputStream dataIn; private DataOutputStream dataOut;
    private boolean isUse;

    public CommPortManager(CommPort port) { this.commPort = port; }

    public void open() throws Exception {
        CommPortIdentifier id = CommPortIdentifier.getPortIdentifier(commPort.getCommPortName());
        serialPort = (SerialPort) id.open(commPort.getOwnerName(), 5000);
        in = serialPort.getInputStream();
        out = serialPort.getOutputStream();
        bufReader = new BufferedReader(new InputStreamReader(in, "Unicode"));
        bufWriter = new BufferedWriter(new OutputStreamWriter(out));
        dataIn = new DataInputStream(in);
        dataOut = new DataOutputStream(out);
        serialPort.setSerialPortParams(
            Integer.parseInt(commPort.getBaudRate()),
            Integer.parseInt(commPort.getDataBit()),
            Integer.parseInt(commPort.getStopBit()),
            Integer.parseInt(commPort.getPartityBit()));
    }

    public boolean commPortEnable() {
        Enumeration<CommPortIdentifier> en = CommPortIdentifier.getPortIdentifiers();
        while (en.hasMoreElements()) {
            CommPortIdentifier pid = en.nextElement();
            if (pid.getPortType() == CommPortIdentifier.PORT_SERIAL
                && pid.getName().equalsIgnoreCase(commPort.getCommPortName()))
                return true;
        }
        return false;
    }
    // getter/setter 略
}

使用流程

  1. 構建 CommPort 參數。
  2. 實例化 CommPortManager,調用 open()。
  3. 透過 dataOut.write() 發送指令,dataIn.read() 接收回應。
  4. 用完調用 serialPort.close() 釋放資源。

常見坑

  • DLL/so 架構不匹配(32/64 位)導致 UnsatisfiedLinkError。
  • 串口被佔用拋 PortInUseException,需檢查其他程式。
  • 編碼不一致(Unicode/UTF-8/GBK)導致亂碼,雙端協商統一。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved