尝试了两种jar包:comm和RXTXcomm
由于comm只能适配32位虚拟机,运行会报错且找不到串口:
D:\PractiseJava\SerialPort>java -classpath comm.jar; ListPorts Error loading win32com: java.lang.UnsatisfiedLinkError: C:\Program Files\Java\jdk-15.0.2\bin\win32com.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform No serial port found
因此使用RXTXcomm包:RXTX下载
/** * this is a serial port opration class * @author XYM_ * @date 2021-4-23 * @version1.0 */ import java.util.*; import gnu.io.*; public class ListPortsRXTX{ public static void main(String[] args){ CommPortIdentifier portId = null; Enumeration<?> allPorts = CommPortIdentifier.getPortIdentifiers(); while(allPorts.hasMoreElements() == true){ portId = (CommPortIdentifier)allPorts.nextElement(); if(portId.getPortType() == CommPortIdentifier.PORT_SERIAL){ System.out.println("Serial Port: " + portId.getName()); } } } }
运行结果:
D:\PractiseJava\SerialPort>java -classpath RXTXcomm.jar; ListPortsRXTX Serial Port: COM1 Serial Port: COM2
/** * this is a serial port opration class * @author XYM_ * @date 2021-4-23 * @version1.0 */ import java.util.*; import gnu.io.*; public class OpenAndClose{ public static void main(String[] args){ // search and list all ports CommPortIdentifier portId = null; Enumeration<?> allPorts = CommPortIdentifier.getPortIdentifiers(); while(allPorts.hasMoreElements() == true){ portId = (CommPortIdentifier)allPorts.nextElement(); if(portId.getPortType() == CommPortIdentifier.PORT_SERIAL){ System.out.println("Serial Port: " + portId.getName()); } } // get the ports CommPortIdentifier com1 = null; CommPortIdentifier com2 = null; try{ com1 = CommPortIdentifier.getPortIdentifier("COM1"); com2 = CommPortIdentifier.getPortIdentifier("COM2"); }catch(NoSuchPortException e){ e.printStackTrace(); } // open the ports SerialPort serialCom1 = null; SerialPort serialCom2 = null; try{ //firstparam: the owner of the port opened //secondparam: the time (ms) to wait when the port is in use serialCom1 = (SerialPort)com1.open("OpenAndClose",1000); serialCom2 = (SerialPort)com2.open("OpenAndClose",1000); }catch(PortInUseException e){ e.printStackTrace(); } // set the param of the ports try{ serialCom1.setSerialPortParams( 9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE ); serialCom2.setSerialPortParams( 9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE ); }catch(UnsupportedCommOperationException e){ e.printStackTrace(); } // close the ports serialCom1.close(); serialCom2.close(); } }
运行后可以在设备管理器中看到端口设置已被改写:
ref:
串口数据的发送与监听读取
Java实现串口数据读写
使用Java实现串口通信