关于java串口读取数据的编码! 该如何去读取串口数据,最好能有编码和说明!菜鸟在做一个java串口调试小工具,希望能得到高手的指点。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 import java.io.*;import java.util.*;import javax.comm.*;public class SerialBean implements Runnable,SerialPortEventListener{ String PortName; int baud; CommPortIdentifier portId; SerialPort serialPort; static OutputStream out; static InputStream in; String Buf=null;// 缓存一条最新信息 boolean hasData=false;// 标志有无新数据 StringBuilder buf=new StringBuilder(128); Thread readThread; public SerialBean(int PortID,int baud) { PortName="COM"+PortID; this.baud=baud; } public int Initialize() { int InitSuccess=1; int InitFail=-1; try { portId=CommPortIdentifier.getPortIdentifier(PortName); try { serialPort=(SerialPort)portId.open("Serial_Communication",2000); serialPort.setSerialPortParams(this.baud,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE); serialPort.addEventListener(this); serialPort.notifyOnDataAvailable(true); } catch(PortInUseException e) { return InitFail; } catch(TooManyListenersException e) { return InitFail; } catch(UnsupportedCommOperationException e) { return InitFail; } try { in=serialPort.getInputStream(); out=serialPort.getOutputStream(); } catch(IOException e) { return InitFail; } } catch(NoSuchPortException e) { return InitFail; } readThread=new Thread(this); readThread.start(); return InitSuccess; } 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 { char b; while(in.available()>0) { b=(char)in.read(); buf.append(b); } 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); this.hasData=true; } // System.out.println(con); } catch(IOException e) { } break; } } public void run() { try { Thread.sleep(2000); } catch(InterruptedException e) { } }} 楼上的需要一个包http://www.oracle.com/technetwork/java/index-jsp-141752.html 使用rxtx包做串口开发,比官方的要好一些。 分解String时,split和Scanner的区别,我不是特别明白。 手机游戏机型选择源码。 请较一个关于赋值的问题 怎样将自己写的java桌面应用程序做成exe用myeclipse可以吗 谁知道JSF帮助哪有下载吗? 如何知道一个字符串是否包含dom4j解析器所不能解析的字符? StringTokenizer 新手求解 如何比较两个文件的内容,并且打印出两个文件中内容有差别的行呢? 怎么样让自己的窗口在其他程序的前面,让自己的窗口在最前面,非常急急 关于Java多线程协调的疑惑 Java文件生成.h文件 找不到类。。
import java.util.*;
import javax.comm.*;public class SerialBean implements Runnable,SerialPortEventListener
{
String PortName;
int baud;
CommPortIdentifier portId;
SerialPort serialPort;
static OutputStream out;
static InputStream in;
String Buf=null;// 缓存一条最新信息
boolean hasData=false;// 标志有无新数据
StringBuilder buf=new StringBuilder(128);
Thread readThread; public SerialBean(int PortID,int baud)
{
PortName="COM"+PortID;
this.baud=baud; }
public int Initialize()
{
int InitSuccess=1;
int InitFail=-1;
try
{
portId=CommPortIdentifier.getPortIdentifier(PortName);
try
{
serialPort=(SerialPort)portId.open("Serial_Communication",2000);
serialPort.setSerialPortParams(this.baud,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
}
catch(PortInUseException e)
{
return InitFail;
}
catch(TooManyListenersException e)
{
return InitFail;
}
catch(UnsupportedCommOperationException e)
{
return InitFail;
}
try
{
in=serialPort.getInputStream();
out=serialPort.getOutputStream();
}
catch(IOException e)
{
return InitFail;
} }
catch(NoSuchPortException e)
{
return InitFail;
}
readThread=new Thread(this);
readThread.start();
return InitSuccess;
}
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
{
char b;
while(in.available()>0)
{
b=(char)in.read();
buf.append(b);
}
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);
this.hasData=true; } // System.out.println(con);
}
catch(IOException e)
{
}
break;
}
} public void run()
{
try
{
Thread.sleep(2000);
}
catch(InterruptedException e)
{
}
}
}
http://www.oracle.com/technetwork/java/index-jsp-141752.html