java Rxtx串口接收不到数据,大神们求帮助
package org.zx.serial;
//import java.awt.TextArea;
import java.io.*;
import java.util.*;
import gnu.io.*;
//import javax.swing.JTextArea;
public class SerialRead implements Runnable,SerialPortEventListener{
//JTextArea textArea;
String PortName;
int baud;
int databits;
int stopbits;
int parity;
CommPortIdentifier portId;
SerialPort serialPort;
static OutputStream out;
static InputStream in;
String Buf=null;// 缓存一条最新信息
boolean hasData=false;// 标志有无新数据
StringBuilder buf=new StringBuilder(128);
Thread readThread;
public void Init(String[] data){
this.PortName=data[0];
this.baud=Integer.parseInt(data[1]);
this.databits=Integer.parseInt(data[2]);
this.stopbits=Integer.parseInt(data[3]);
if(data[4]=="NONE")
this.parity=SerialPort.PARITY_NONE;
if(data[4]=="Odd")
this.parity=SerialPort.PARITY_ODD;
if(data[4]=="Even")
this.parity=SerialPort.PARITY_EVEN;
if(data[4]=="Mark")
this.parity=SerialPort.PARITY_MARK;
if(data[4]=="Space")
this.parity=SerialPort.PARITY_SPACE;
// this.textArea=textArea;
}
public int PortInitialize()
{
int InitSuccess=1;
int InitFail1=-1;
int InitFail2=-2;
int InitFail3=-3;
// int InitFail4=-4;
int InitFail5=-5;
try
{
portId=CommPortIdentifier.getPortIdentifier(PortName);
try
{
serialPort=(SerialPort)portId.open("Serial_Communication",2000); //串口过期时间
serialPort.setSerialPortParams(this.baud,this.databits,this.stopbits,this.parity);
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true); //设置监听模式为当有数据到达时唤醒监听线程
}
catch(PortInUseException e)
{
return InitFail1;
}
catch(TooManyListenersException e)
{
return InitFail2;
}
catch(UnsupportedCommOperationException e)
{
return InitFail3;
}
}
catch(NoSuchPortException e)
{
return InitFail5;
}
readThread=new Thread(this);
readThread.start();
return InitSuccess;
}
public void run()
{
try
{
Thread.sleep(2000);
}
catch(InterruptedException e)
{
}
}
public boolean hasData()
{
return hasData;
}
public String ReadPort()
{
// if(hasData)
// {
// this.hasData=false;
return this.Buf;
// }
// else
// return null;
}
@SuppressWarnings("deprecation")
public void ClosePort()
{
if(readThread!=null )
readThread.stop();
if(serialPort!=null)
serialPort.close();
}
@Override
public void serialEvent(SerialPortEvent event)
{
/**
* 事件类型:
*
* BI -通讯中断. CD -载波检测. CTS -清除发送. DATA_AVAILABLE -有数据到达.
* DSR-数据设备准备好. FE -帧错误. OE -溢位错误. OUTPUT_BUFFER_EMPTY
* -输出缓冲区已清空. PE -奇偶校验错. RI - 振铃指示.
*/
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
{
in=serialPort.getInputStream();
out=serialPort.getOutputStream();
}
catch(IOException e)
{
// return InitFail4;
}
try
{
char b;
while(in.available()>0)
{
b=(char)in.read();
buf.append(b);
}
Buf="Test2"+buf.toString();
// this.hasData=true;
/* int beg=0,end=0;
for(int i=0;;i++)
{
if(buf.length()<2)
{
return;
}
if(buf.charAt(0)=='\r'&&buf.charAt(1)=='\n')// 以回车换行开头
{
beg=2;
}
else
// 不以换行开头
{
beg=0;
}
end=buf.indexOf("\r\n",beg);
if(end==-1)// 未接受完一整条信息
break;
Buf=buf.substring(beg,end);// 截取数据
buf.delete(0,end+2);// 删除已用数据
// System.out.printf("--%s--\n",Buf);
// textArea.setText("Test");
this.hasData=true;
}
*/
// System.out.println(con);
}
catch(IOException e)
{
}
break;
}
}
}
//import java.awt.TextArea;
import java.io.*;
import java.util.*;
import gnu.io.*;
//import javax.swing.JTextArea;
public class SerialRead implements Runnable,SerialPortEventListener{
//JTextArea textArea;
String PortName;
int baud;
int databits;
int stopbits;
int parity;
CommPortIdentifier portId;
SerialPort serialPort;
static OutputStream out;
static InputStream in;
String Buf=null;// 缓存一条最新信息
boolean hasData=false;// 标志有无新数据
StringBuilder buf=new StringBuilder(128);
Thread readThread;
public void Init(String[] data){
this.PortName=data[0];
this.baud=Integer.parseInt(data[1]);
this.databits=Integer.parseInt(data[2]);
this.stopbits=Integer.parseInt(data[3]);
if(data[4]=="NONE")
this.parity=SerialPort.PARITY_NONE;
if(data[4]=="Odd")
this.parity=SerialPort.PARITY_ODD;
if(data[4]=="Even")
this.parity=SerialPort.PARITY_EVEN;
if(data[4]=="Mark")
this.parity=SerialPort.PARITY_MARK;
if(data[4]=="Space")
this.parity=SerialPort.PARITY_SPACE;
// this.textArea=textArea;
}
public int PortInitialize()
{
int InitSuccess=1;
int InitFail1=-1;
int InitFail2=-2;
int InitFail3=-3;
// int InitFail4=-4;
int InitFail5=-5;
try
{
portId=CommPortIdentifier.getPortIdentifier(PortName);
try
{
serialPort=(SerialPort)portId.open("Serial_Communication",2000); //串口过期时间
serialPort.setSerialPortParams(this.baud,this.databits,this.stopbits,this.parity);
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true); //设置监听模式为当有数据到达时唤醒监听线程
}
catch(PortInUseException e)
{
return InitFail1;
}
catch(TooManyListenersException e)
{
return InitFail2;
}
catch(UnsupportedCommOperationException e)
{
return InitFail3;
}
}
catch(NoSuchPortException e)
{
return InitFail5;
}
readThread=new Thread(this);
readThread.start();
return InitSuccess;
}
public void run()
{
try
{
Thread.sleep(2000);
}
catch(InterruptedException e)
{
}
}
public boolean hasData()
{
return hasData;
}
public String ReadPort()
{
// if(hasData)
// {
// this.hasData=false;
return this.Buf;
// }
// else
// return null;
}
@SuppressWarnings("deprecation")
public void ClosePort()
{
if(readThread!=null )
readThread.stop();
if(serialPort!=null)
serialPort.close();
}
@Override
public void serialEvent(SerialPortEvent event)
{
/**
* 事件类型:
*
* BI -通讯中断. CD -载波检测. CTS -清除发送. DATA_AVAILABLE -有数据到达.
* DSR-数据设备准备好. FE -帧错误. OE -溢位错误. OUTPUT_BUFFER_EMPTY
* -输出缓冲区已清空. PE -奇偶校验错. RI - 振铃指示.
*/
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
{
in=serialPort.getInputStream();
out=serialPort.getOutputStream();
}
catch(IOException e)
{
// return InitFail4;
}
try
{
char b;
while(in.available()>0)
{
b=(char)in.read();
buf.append(b);
}
Buf="Test2"+buf.toString();
// this.hasData=true;
/* int beg=0,end=0;
for(int i=0;;i++)
{
if(buf.length()<2)
{
return;
}
if(buf.charAt(0)=='\r'&&buf.charAt(1)=='\n')// 以回车换行开头
{
beg=2;
}
else
// 不以换行开头
{
beg=0;
}
end=buf.indexOf("\r\n",beg);
if(end==-1)// 未接受完一整条信息
break;
Buf=buf.substring(beg,end);// 截取数据
buf.delete(0,end+2);// 删除已用数据
// System.out.printf("--%s--\n",Buf);
// textArea.setText("Test");
this.hasData=true;
}
*/
// System.out.println(con);
}
catch(IOException e)
{
}
break;
}
}
}
...全文
相关推荐
Java使用开源Rxtx实现串口通讯 串口开发
Java使用开源Rxtx实现串口通讯 串口开发,里面包含实例,下载后按自己的要求进行修改即可(仅限对java有基础的人员)。
JAVA串口助手接收数据并解析数据存入MySQL数据库中
JAVA串口助手接收串口来的数据,并将数据解析存储入MySQL数据库中,在使用前串口需要有设备,同时自己创建数据库与数据表,见README
串口通信关于串口找不到的问题
串口通信关于串口找不到的问题(我开始也被困扰了好久,终于解决,与大家分享一下)
JAVA串口调试助手RXTX 源码
java调试助手源码 rxtx串口通信 64位机测试成功 ,RXTX需要自己添加
java-rxtx串口通信读取电子秤数据全源码包win7x64
java-rxtx串口通信读取电子秤数据全源码包win7x64, 测试通过.


Java SE
