用comm读串口数据代码如下int count = 0;
receivejTextArea.append("re>");
while ( count == 0) {
count = inputStream.available();
if( count > 0){
byte readBuffer[] = new byte[count];
inputStream.read(readBuffer);
String receiveString = new String(readBuffer);
receivejTextArea.append(receiveString+"\r\n");// 打印串口数据
}
}
当串口发字符串“PLEASE ENTER SERVEN CHARS:”时,显示是
re>PLEASE
re>ENTER SE
re>RVEN CHARS:我读数据的代码有问题么,为什么同一次发送的数据,读出来却是分段的??但是有时候却能整段的读完,不明白原因
请大家帮忙
receivejTextArea.append("re>");
while ( count == 0) {
count = inputStream.available();
if( count > 0){
byte readBuffer[] = new byte[count];
inputStream.read(readBuffer);
String receiveString = new String(readBuffer);
receivejTextArea.append(receiveString+"\r\n");// 打印串口数据
}
}
当串口发字符串“PLEASE ENTER SERVEN CHARS:”时,显示是
re>PLEASE
re>ENTER SE
re>RVEN CHARS:我读数据的代码有问题么,为什么同一次发送的数据,读出来却是分段的??但是有时候却能整段的读完,不明白原因
请大家帮忙
解决方案 »
- jList刷新问题
- 写一个静态方法,两个int参数,交换传进来的参数
- 散分,java适合不适合编写桌面应用程序?
- 我是初学者,一个问题混扰了我一个月
- 一个简单但让我糊涂问题
- 使用Java如何存取DB2的BLOB、CLOB字段?急用。
- [Good News]IBM WebSphere Studio Application Developer 5.1推出啦!!!
- 如何把一个字符串中所有指定的字符删除?
- 弱智问题加高分~~~~快来~~~~~~~~
- 求解:为什么我写的Java程序不能显示中文。
- 关于jtextfield的焦点处理问题。带弹出对话框的。
- jtextfield焦点的问题,主要是有对话框就不行了。
前段时间还用了这个 javax.comm
我帮你找找我原来怎么用的
public void serialEvent(SerialPortEvent e){
StringBuffer stringBuffer= new StringBuffer();
int readData= 0;
switch(e.getEventType()){
case SerialPortEvent.DATA_AVAILABLE:
while(readData!= -1){
try{
readData= inStream.read();
if(readData== -1){
break;
}
String value; //转换数据显示,用十六进制输出
if(readData>= 16){
value= Integer.toHexString(readData).toUpperCase();
}else if(readData>= 0){
value= "0".concat(Integer.toHexString(readData).toUpperCase());
}else{
value= Integer.toHexString(readData).substring(6).toUpperCase(); //当数据小于0时转换成十六进制显示时取后两位数据位,忽略符号位
}
stringBuffer.append(value+ " "); //将数据转换为十六进制显示
}catch(IOException ex){
ex.printStackTrace();
}
}
/**
* 以下代码构造接收的数据字符串,并在输出区域显示返回信息
*/
for(int i=101;i<stringBuffer.length();i+=3*34){ //数据过长时加入换行符
stringBuffer.setCharAt(i, '\n'); //通过在指定位置插入换行符实现自动换行功能
}
String data= new String(stringBuffer);
String infoStr= new Date()+ "(串口测试)\n"+ data+ "\n\n";
System.out.println(infoStr);
this.commFrame.getRecvArea().append(infoStr); //将接收到的数据以十六进制显示在文本区域
// case SerialPortEvent.BI:
// System.err.println("Break Interrupted...!");
// String info= new Date()+ "\n "+ "Break Interrupted...!"+ "\n\n";
// this.commFrame.getRecvArea().append(info);
}
}
你的inStream是DataInputStream类型吧?调用一次inStream.read();是读取一个整型数据(四个字节)么?我使用的是InputStream,调用inputStream.available()得到当前串口缓冲区内的字节数,然后new一个相应长度的字节读取进去。
给串口发送一段字符串时,比如 PLEASE ENTER SERVEN CHARS:
我觉得应该是inputStream.available()返回26(有26个字母),然后就可以一次读取出来但是实际情况是把上面字符分成了三段,每次我只能读一段,一共发了三次DATA_AVAILABLE消息为什么不能一次读取出来呢