使用java进行串口通信确实不是串口通讯操作的主流方法,另外写好的的java程序无法随意的迁移。不过对熟悉java的同学确实挺有帮助,下面是我使用java语言进行串口通讯的过程。

  1 usb转串口安装。

  2 jar包的安装。

  3 java代码的实现。

  usb转串口的安装。

  一般把串口线插上电脑就会提示安装驱动,在网上下一个串口驱动就会成功了。可我的电脑却怎么也成功不了,在网上找了各种方法就是不行(我的系统是win7)。更有不靠谱的说法是重装系统。总之试变了网上的驱动,还用什么驱动精灵之类的都把还是没有成功。打开设备管理器,usb-serial controller总是有×××的叹号。

   我的解决方法。

   运行-》输入hdwwiz-》下一步选择安装我手动列表中选择硬件(高级)-》下一步选择端口(com和lpt)-》下一步选择public-》然后选择第一个public ............->再点击下一步进行安装。

   最后终于成功了。

   安装jar包

   安装jar包和我们平常的引入jar包不太一样。附件是用到的jar包。

  首先把RXTXcomm.jar放入所用jre的lib目录下,把rxtxSerial.dll放到jre的bin目录下就可以了。

  代码实现

  主要是两步第一步查到所使用的com口。第二步对串口进行监听。

  具体的代码如下:


import java.io.*;

import java.util.*;


import test.FeelTheBase;

import test.SimpleReadA;


import gnu.io.*;


public class SimpleRead implements SerialPortEventListener { // SerialPortEventListener

// 监听器,我的理解是独立开辟一个线程监听串口数据

public CommPortIdentifier portId; // 串口通信管理类

static Enumeration portList; // 已经连接上的端口的枚举

public InputStream inputStream; // 从串口来的输入流

public InputStreamReader streamReader;

public OutputStream outputStream;// 向串口输出的流

public OutputStreamWriter streamwriter;

public SerialPort serialPort; // 串口的引用

public void init() {

try {

   serialPort = (SerialPort) portId.open(s, 2000);// 打开串口名字为myapp,延迟为2毫秒

   inputStream = serialPort.getInputStream();

outputStream = serialPort.getOutputStream();

serialPort.addEventListener(this); // 给当前串口天加一个监听器

} catch (FileNotFoundException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

    catch (TooManyListenersException e) {

}

serialPort.notifyOnDataAvailable(true); // 当有数据时通知

try {

serialPort.setSerialPortParams(57600, SerialPort.DATABITS_8, // 设置串口读写参数

SerialPort.STOPBITS_1, SerialPort.PARITY_ODD);

} catch (UnsupportedCommOperationException e) {

}

}


public void serialEvent(SerialPortEvent event) {// SerialPortEventListener

// 的方法,监听的时候会不断执行

switch (event.getEventType()) {

case SerialPortEvent.BI:

case SerialPortEvent.OE:

case SerialPortEvent.FE:

case SerialPortEvent.PE:

case SerialPortEvent.CD:

case SerialPortEvent.CTS:

case SerialPortEvent.DSR:

case SerialPortEvent.RI:

case SerialPortEvent.OUTPUT_BUFFER_EMPTY:

break;

case SerialPortEvent.DATA_AVAILABLE:// 当有可用数据时读取数据,并且给串口返回数据

try {

while (inputStream.available() > 0) {

byte[] by = new byte[inputStream.available()];

inputStream.read(by);

   System.out.println(by);//获得的数据

}

} catch (IOException e) {

}

break;

}

}

public static void main(String[] args) {

SimpleRead com3 = new SimpleRead();

try {

portList = CommPortIdentifier.getPortIdentifiers(); // 得到当前连接上的端口

while (portList.hasMoreElements()) {

CommPortIdentifier p = (CommPortIdentifier) portList

.nextElement();

if (p.getPortType() == CommPortIdentifier.PORT_SERIAL) {// 判断如果端口类型是串口

if (p.getName().equals("COM25")) { // 判断如果COM3端口已经启动就连接

com3.setCom(p);

com3.setOther(com5);

System.out.println(p.getName());


}

}

}

com3.init(); // 实例一个;

} catch (Exception e) {

e.printStackTrace();

}

}

}