java Rxtx串口接收不到数据,大神们求帮助

AK872424031 2015-05-10 04:23:44
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;
}
}


}
...全文
161 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧