java GUI获取电子秤数据不完整问题

获取电子秤的数据如下:

    +53.1
8  g 

   +53.1
8  g 

   +53.1
8  g 

   +53.1
8  g 

确实应该获取的数据是53.08g,但是不知道为什么一个数据是分成两部分返回的
代码如下:

    /**
 * 从串口读取数据
 * @param serialPort 当前已建立连接的SerialPort对象
 * @return 读取到的数据
 * @throws ReadDataFromSerialPortFailure 从串口读取数据时出错
 * @throws SerialPortInputStreamCloseFailure 关闭串口对象输入流出错
 */
public static byte[] readFromPort(SerialPort serialPort) throws ReadDataFromSerialPortFailure, SerialPortInputStreamCloseFailure {

    InputStream in = null;
    byte[] bytes = null;

    try {
        in = serialPort.getInputStream();//取入数据
        int bufflenth = in.available();     //获取buffer里的数据长度

        while (bufflenth != 0) {                             
            bytes = new byte[bufflenth];    //初始化byte数组为buffer中数据的长度
            in.read(bytes);
            bufflenth = in.available();
        } 
    } catch (IOException e) {
        throw new ReadDataFromSerialPortFailure();
    } finally {
        try {
            if (in != null) {
                in.close();
                in = null;
            }
        } catch(IOException e) {
            throw new SerialPortInputStreamCloseFailure();
        }
    }

    return bytes;

}


/**
 * 以内部类形式创建一个串口监听类
 * @author zhong
 *
 */
private class SerialListener implements SerialPortEventListener {
    /**
     * 处理监控到的串口事件
     */
    public void serialEvent(SerialPortEvent serialPortEvent) {
        switch (serialPortEvent.getEventType()) {
            case SerialPortEvent.BI: // 10 通讯中断
                JOptionPane.showMessageDialog(null, "与串口设备通讯中断", "错误", JOptionPane.INFORMATION_MESSAGE);
                break;
            case SerialPortEvent.OE: // 7 溢位(溢出)错误

            case SerialPortEvent.FE: // 9 帧错误

            case SerialPortEvent.PE: // 8 奇偶校验错误

            case SerialPortEvent.CD: // 6 载波检测

            case SerialPortEvent.CTS: // 3 清除待发送数据

            case SerialPortEvent.DSR: // 4 待发送数据准备好了

            case SerialPortEvent.RI: // 5 振铃指示

            case SerialPortEvent.OUTPUT_BUFFER_EMPTY: // 2 输出缓冲区已清空
                break;

            case SerialPortEvent.DATA_AVAILABLE: // 1 串口存在可用数据
                byte[] data = null;
                try {

                    if (serialPort == null) {//判断串口对象是否为空
                        JOptionPane.showMessageDialog(null, "串口对象为空!监听失败!", "错误", JOptionPane.INFORMATION_MESSAGE);
                    }else {
                        data = SerialTool.readFromPort(serialPort); //读取数据,存入字节数组
                        System.out.println(new String(data));
                        //自定义解析过程
                        if (data != null && data.length > 1) {  //检查数据是否读取正确
                                try {
                                    weight.setText(new String(data) + " g");
                                } catch (ArrayIndexOutOfBoundsException e) {
                                    JOptionPane.showMessageDialog(null, "数据解析过程出错,更新界面数据失败!请检查设备或程序!", "错误", JOptionPane.INFORMATION_MESSAGE);
                                    System.exit(0);
                                }
                        }else {
                            JOptionPane.showMessageDialog(null, "读取数据过程中未获取到有效数据!请检查设备或程序!", "错误", JOptionPane.INFORMATION_MESSAGE);
                            System.exit(0);
                        }
                    }   
                } catch (ReadDataFromSerialPortFailure | SerialPortInputStreamCloseFailure e) {
                    JOptionPane.showMessageDialog(null, e, "错误", JOptionPane.INFORMATION_MESSAGE);
                    System.exit(0); //发生读取错误时显示错误信息后退出系统
                }   
                break;
        }
    }
}

请知道的朋友说一下问题出现在哪里

0

1个回答

解決辦法:參考:https://bbs.csdn.net/topics/300069815

public void serialEvent(SerialPortEvent event) {
        try {
            // 等待1秒钟让串口把数据全部接收后在处理
            Thread.sleep(delayRead);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        switch (event.getEventType()) {
        case SerialPortEvent.BI: // 10
        case SerialPortEvent.OE: // 7
        case SerialPortEvent.FE: // 9
        case SerialPortEvent.PE: // 8
        case SerialPortEvent.CD: // 6
        case SerialPortEvent.CTS: // 3
        case SerialPortEvent.DSR: // 4
        case SerialPortEvent.RI: // 5
        case SerialPortEvent.OUTPUT_BUFFER_EMPTY: // 2
            break;
        case SerialPortEvent.DATA_AVAILABLE: // 1
            try {
                // 多次读取,将所有数据读入
                // while (inputStream.available() > 0) {
                // numBytes = inputStream.read(readBuffer);
                // }
                numBytes = inputStream.read(readBuffer);
                changeMessage(readBuffer, numBytes);
            } catch (IOException e) {
                e.printStackTrace();
            }
            break;
        }
    }

    // 通过observer pattern将收到的数据发送给observer
    // 将buffer中的空字节删除后再发送更新消息,通知观察者
    public void changeMessage(byte[] message, int length) {
        byte[] temp = new byte[length];
        System.arraycopy(message, 0, temp, 0, length);
        System.out.println(new String(temp));
        System.out.println(1);
    }

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
rxtx java获取电子称重量数据完整版
rxtx java获取电子称重量数据完整版 最近因为要弄一个网页获取电子称重量的功能,所以去查看了这方面的资料,找了许多人的资料,看了许多。这个对于我来说本来就是新东西,更加不懂。所以这个东西对于新手很适合,里面项目我都测试过了,里面还附带说明,按照我说的你一定是会成的。虽然我花了几天时间去看这个,本来想要分的,但是还是算了。希望可以帮到需要的的朋友。有什么问题可以联系我。
java串口编程-读取称重仪表中净重
一、需求说明rn        将仪表和计算机串口相连,计算机通过软件向仪表发送指令,然后仪表返回结果,在计算机软件界面上显示。rn rn二、实现过程rn1、查看仪表说明书rn        仪表型号为XK3190-A9,主要是查看相关参数(波特率、数据位、停止位、奇偶校验),通讯方式及指令规则。rn rn2、使用串口通讯工具、串口监听工具进行调试rn        网上可以下到很多相关软件,主要...
java RS232串口通讯(电子天平数据抓取)
使用网页读取串口电子秤的重量 使用插件方式或者JS方式实现, 在网页的特定地方显示当前通过RS232链接的电子秤上的重量数据。 支持主要浏览器:Chrome,Firefox,IE8以上 我的博客 java RS232串口通讯上有对此有相关方法,希望能对大家有帮助。
【php】 Web应用读取客户端电子秤实现方案
厂家给的是个封装好的dll文件,想看串口通信的可以散了nn一、用.net写个控制台程序(为什么用.net,厂家给的demo就是.NET的,而且.NET写控制台程序比php方便一丢丢吧)nn 程序内容:死循环(好听点叫定时器)读取电子称接口数据,重量发生改变时把重量信息存进本地redisnn二、写个用php 写个 socket服务端(为什么用php?只会php)nn 程序内容:监听请求,...
java-rxtx串口通信读取电子秤数据全源码包win7x64
java-rxtx串口通信读取电子秤数据全源码包win7x64, 测试通过.
使用Java Applet和Java串口编程API实现电子称称重功能
Java Applet技术应该算是Java语言诞生之初在Web领域唯一的一个卖点,有一段时间非常流行Applet做的动画,聊天室和游戏。但是由于Applet自身存在的一些问题,比如要求浏览器装有JRE,很多用户不愿意去装;开发困难,没有好的IDE,性能差等;导致Applet慢慢地被Java在服务器端的优秀表现所淹没。nJava串口编程使用的是javax.comm包下的SerialPortEventL
电子秤串口读取与发送
资源包含"设置虚拟串口软件"以及"串口调试软件"和串口发送获取代码。
蓝牙连接电子称以及解析电子称返回的数据
import java.io.IOException;nimport java.io.InputStream;nimport java.util.ArrayList;nimport java.util.Arrays;nimport java.util.List;nimport java.util.UUID;nnimport net.intelink.express.SZYDPDA.R;nimpor
js获取电子称数据MScomm
MSComm1串口连接电子称重仪MSComm简单了解话不多说上代码MSComm1::OnCommnMSComm简单了解nMSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。仅限ie浏览器。n话不多说上代码nwindow.onload = function() {n ConfigPort() //页面加载进来函数n }n var res='' //做标识 保存端口...
C#通过串口通信读取电子称上数据
串口通信,电子称数据读取。程序详细易懂,可以扩展到其他应用。
Android下的串口通信实战之电子秤交互
Android下的串口通信实战之电子秤交互 http://blog.csdn.net/qq_27570955/article/details/59086056
C#读取电子秤重量
该程序通过配置串口COM端口号,实现对电子秤称取数据的访问输出。
winform读取串口电子秤重量
耀华3190-A12+E型号电子秤,串口连接,winform读取通过串口读取重量;有两种模式:1、连续发送模式请使用代码中的方案2;2、指令模式请使用方案1;默认模式是指令模式(需要设置电子秤为指令模式,才可以使用清零、读数功能)。建议先使用超级终端测试电子秤是否可以正常发送数据到电脑上(超级终端是需要设置连续发送模式,电子秤默认就是连续发送的,波特率9600,其他默认就可以了;其他品牌电子秤需要看说明书来对应调整)
java读取串口数据不完整
从串口读取字节之前先延时50ms,之前!!!之前!!!之前!!!rn public static byte[] readFromPort(SerialPort serialport) {rn InputStream in = null;rn byte[] bytes = {};rn try {rn Thread.sleep(50);rn } catch (InterruptedException ...
SerialPort访问接口获取电子称数据
SerialPort访问接口获取电子称数据,c#。从网上找的可以参考一下。
【Java】JSOUP请求JSON 及解决jsoup不能完整获取响应内容的问题
用JSOUP来请求接口,构造请求头的时候非常方便。代码如下:nnnDocument doc = Jsoupn .connect(Constant.DATA_URL)n .timeout(10000).get();nElement body = doc.body();nJSONObject json = JSONObject.fromObject(body.text());nn 但是出现问题了,...
耀华电子秤问题(蓝牙设备)
耀华电子秤在命令模式下发送55指令没有响应,在连续模式下可以接受秤所接收的数据。
http请求循环调用返回数据抓取不全解决
最近碰到一个问题,就是频繁调用http请求,返回的数据出现缺失的情况。特此记录下解决过程。nn先上代码  普通的get调用方法nnn public String sendGet(String urlStr) throws InterruptedException {n try {n //获取httpURLConnection对象n U...
Java socket编程客户端读取数据不完整
今天在用java socket读取服务器端发送的数据时,发现只能读取服务器端发送的部分数据,无法完整读取服务器端的数据。数据大概有7W多个字节。rnrn原代码如下:rn private String getSocketDCCReceiveCCA() throws IOException{rn InputStream stream=socket.getInputStream();rn b...
怎么解决jsoup不能完整获取响应内容的问题
当使用jsoup做爬虫类的应用时,很是方便。rn但如果遇到不能完整获取响应内容时,一般有以下几个原因。rn1. 网络异常,造成读取不全。这个很少发生,因为jsoup会报告exceptionrn2. 网络超时,此时可以设置 connection.timeout(n) 增加超时时间。rn3. 一切看起来都正常,也没有异常发生。 但是获取的数据就是少了一截。rnrnrn这里主要将第三点。rn仔细分析获取
InputStream类available和read方法可能读取不到完整的流数据
1、问题描述rn项目需要一个将网络流InputStream转换为byte[]数组的方法,于是从网上找了下面的方法:rnrn private byte[] toByteArray(InputStream input) throws IOException {n byte[] buffer = new byte[(int) in.available()];n in.read(buffer)
耀华电子秤A7+软件
要获取物品的秤重重量和物品的条码,接上电子秤,即可显示在edit中,绝对可用
java socket 半包,接受不完整处理
最近遇到了个奇怪的问题,esp8266发给andorid客户端的数据产生了不完整的数据,导致json无法解析。经过分析原因为:数据没有一次性接收完毕(数据接受不完整),具体问题如下rn ![不完整的](https://img-blog.csdnimg.cn/20190106143700261.png)rn 此数据是接受不完整的rn ![在这里插入图片描述](https://img-blog.csdni...
C#获取电子称源代码
全面、适用。这个代码是研究好久弄出来的,您可以下载试一下
托利多电子称下传C#源代码,以及包括调用DLL文件
托利多电子称下传C#源代码,以及包括调用DLL文件,全源代码文件,下载后请尽快删除
C#winform实现串口通信读取电子天平数据
1.nn本文中所试用的是针对赛多利斯电子天平的称重数据读取,可试用赛多利斯电子天平的类型为SQP系列和BSA系列,两种类型的区别在波特率等的设置不同,其他相同。nn点击开始实验,打开串口,准备读取数据,读取到的数据自动显示在改称重结果上;nn具体实现代码:nn SerialPort receivePort = null;n public delegate void UpdateTextEventH...
asp.net web页面电子称串口控件完整使用方法
asp.net电子称串口控件完整使用方法 完整的js访问电子称接口代码 解决客户端访问MSCOMM32.OCX的问题
托利多电子称开发下传C#源代码
只有下传。
socket通信报文接受不完整或者接收不到的问题
一、问题描述:rnsocket通信中经常会遇到返回报文接收不全甚至完全没有接收到的问题。rn二、解决方案:rn发送方在报文头用固定长度的字节声明该报文正文长度,注意这里的报文正文不包括表示报文长度的字符串本身。接收方在接收报文时先按约定读取报文长度的声明,转换为数字类型,再根据该长度读取报文内容,以避免漏读的情况。rn三、代码实现(Java):rn以8位长度的报文头表示报文正文长度为例,此时报文接收方的示例...
通过串口对磅秤集成,实时读取磅秤数据
通过串口对磅秤集成,实时读取磅秤数据nC#技术,串口通信n主要用到的是与串口的交互方法,以及通过反射的方式,让程序达到只用更新插件就能对各种磅秤进行集成n先来一张软件界面运行截图nn1、打开串口n private void OpenCom()n {n tryn {n if (SpCom.IsOpe...
电子秤源代码
16年电子设计竞赛电子秤源代码16年电16年电子设计竞赛电子秤源代码16年电子设计竞赛电子秤源代11616年16111116年电子设计竞赛电子秤源代码
关于post数据服务器端接收不全
post数据接收不全的问题
记录帖(持续更新):httpclient post 读取数据不全的原因汇总
httpclient访问php服务器有可能获取到数据不全(即返回的json格式不完整),通过网络搜索包括项目解决将可能原因汇总如下(只是遇到的和网络上说明的,欢迎大家补充):n   1. php服务器有缓存,接口从缓存区读取数据,缓存区满了,遇到接口的数据量太大,只能将部分的数据存入缓存区,此时获取到的数据不完整。项目出现的是这个。此时想不通的是浏览器和ios偏好一些,可以获取到更多的数据,对于
获取1亿数据的最大值
Java处理最大值问题; 数秒获取1亿数据的最大值。 Java处理最大值问题; 数秒获取1亿数据的最大值。
针对get方法传输特殊符号(如&)时,会出现参数不完整
解决方法:对参数进行encodeURIComponentnnvar requstParamer = encodeURIComponent(jsonParam);nn nn小tipnnencodeURI和encodeURIComponent两者区别:nnencodeURIComponent支持更多的特殊字符编码,例如&符号,而前者不行;所以对参数进行编码传输,优先使用后者。...
VFP 9 电子称串口读取代码。
VFP 9 电子称串口读取代码,通用所有电子秤。
Odoo 仓库出入库 使用电子秤(地磅)称重获取数量。
山西清水欧度信息技术有限公司 Odoo App 下载地址:nnhttps://apps.odoo.com/apps/browse?repo_maintainer_id=198590nn新增APP:Odoo 仓库出入库 使用电子秤(地磅)称重获取数量。nn 在某些公司、工厂 需要在出入库时对产品进行称重,这时可以直接连接电子秤(地磅)获取数量。nn此模块的源码有一部分来源于Point_of_sale...
技展电子秤连接电脑读取数据C#
技展电子秤链接电脑读取数据,usb链接电脑,包里自带驱动。
java + 线程系列之解决多线程抢占后数据不完整现象(四)
为了展示这个现象我依然新建了一个类来展示//定义了一个count值 让它循环自减1npublic class DemoThread extends Thread { private static int count = 10000; @Overriden public void run() {n super.run();n for (int i =
Android开发电子秤协议
对接各种电子秤的协议,实时显示到Android客户端。并根据电子秤示数的变化而实时更新
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 gui布局学习 java gui入门学习 java