引maven
< dependency>
< groupId> com.github.purejavacomm</ groupId>
< artifactId> purejavacomm</ artifactId>
< version> 1.0.2.RELEASE</ version>
</ dependency>
工具类
package com. fx. client. utils ;
import java. io. IOException ;
import java. io. InputStream ;
import java. io. OutputStream ;
import java. util. ArrayList ;
import java. util. Enumeration ;
import java. util. List ;
import java. util. TooManyListenersException ;
import purejavacomm. CommPort ;
import purejavacomm. CommPortIdentifier ;
import purejavacomm. NoSuchPortException ;
import purejavacomm. PortInUseException ;
import purejavacomm. SerialPort ;
import purejavacomm. SerialPortEventListener ;
import purejavacomm. UnsupportedCommOperationException ;
public class SerialPortUtil {
@SuppressWarnings ( "unchecked" )
public static List < String > getSerialPortList ( ) {
List < String > systemPorts = new ArrayList < > ( ) ;
Enumeration < CommPortIdentifier > portList = CommPortIdentifier . getPortIdentifiers ( ) ;
while ( portList. hasMoreElements ( ) ) {
String portName = portList. nextElement ( ) . getName ( ) ;
systemPorts. add ( portName) ;
}
return systemPorts;
}
public static SerialPort openSerialPort ( String serialPortName)
throws NoSuchPortException , PortInUseException , UnsupportedCommOperationException {
SerialPortParameter parameter = new SerialPortParameter ( serialPortName) ;
return openSerialPort ( parameter) ;
}
public static SerialPort openSerialPort ( String serialPortName, int baudRate)
throws NoSuchPortException , PortInUseException , UnsupportedCommOperationException {
SerialPortParameter parameter = new SerialPortParameter ( serialPortName, baudRate) ;
return openSerialPort ( parameter) ;
}
public static SerialPort openSerialPort ( String serialPortName, int baudRate, int timeout)
throws NoSuchPortException , PortInUseException , UnsupportedCommOperationException {
SerialPortParameter parameter = new SerialPortParameter ( serialPortName, baudRate) ;
return openSerialPort ( parameter, timeout) ;
}
public static SerialPort openSerialPort ( SerialPortParameter parameter)
throws NoSuchPortException , PortInUseException , UnsupportedCommOperationException {
return openSerialPort ( parameter, 2000 ) ;
}
public static SerialPort openSerialPort ( SerialPortParameter parameter, int timeout)
throws NoSuchPortException , PortInUseException , UnsupportedCommOperationException {
CommPortIdentifier portIdentifier = CommPortIdentifier . getPortIdentifier ( parameter. getSerialPortName ( ) ) ;
CommPort commPort = portIdentifier. open ( parameter. getSerialPortName ( ) , timeout) ;
if ( commPort instanceof SerialPort ) {
SerialPort serialPort = ( SerialPort ) commPort;
serialPort. setSerialPortParams ( parameter. getBaudRate ( ) , parameter. getDataBits ( ) , parameter. getStopBits ( ) , parameter. getParity ( ) ) ;
System . out. println ( "开启串口成功,串口名称:" + parameter. getSerialPortName ( ) ) ;
return serialPort;
} else {
throw new NoSuchPortException ( ) ;
}
}
public static void closeSerialPort ( SerialPort serialPort) {
if ( serialPort != null ) {
serialPort. removeEventListener ( ) ;
serialPort. close ( ) ;
System . out. println ( "关闭了串口:" + serialPort. getName ( ) ) ;
}
}
public static void sendData ( SerialPort serialPort, byte [ ] data) throws IOException {
OutputStream os = null ;
try {
os = serialPort. getOutputStream ( ) ;
os. write ( data) ;
os. flush ( ) ;
} catch ( IOException e) {
throw e;
} finally {
try {
if ( os != null ) {
os. close ( ) ;
}
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
}
}
public static byte [ ] readData ( SerialPort serialPort) throws IOException {
InputStream is = null ;
byte [ ] bytes = null ;
try {
is = serialPort. getInputStream ( ) ;
int bufflenth = is. available ( ) ;
while ( bufflenth != 0 ) {
bytes = new byte [ bufflenth] ;
is. read ( bytes) ;
bufflenth = is. available ( ) ;
}
} catch ( IOException e) {
throw e;
} finally {
try {
if ( is != null ) {
is. close ( ) ;
}
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
}
return bytes;
}
public static void setListenerToSerialPort ( SerialPort serialPort, SerialPortEventListener listener) throws TooManyListenersException {
serialPort. addEventListener ( listener) ;
serialPort. notifyOnDataAvailable ( true ) ;
serialPort. notifyOnBreakInterrupt ( true ) ;
}
}
调用
SerialPortUtil . openSerialPort ( 端口 getSerialPortList ( ) . get ( 0 ) ) ;
SerialPortUtil . setListenerToSerialPort ( serialPort, event -> {
if ( event. getEventType ( ) == SerialPortEvent . DATA_AVAILABLE ) {
byte [ ] bytes;
try {
bytes = SerialPortUtil . readData ( serialPort) ;
baseTestService. readMsg ( bytes) ;
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
}
} ) ;