java 实现串口通信 循环打开串口 内存一直在增加 最后溢出

问题描述

我每20秒取一次串口列表,然后打开每一个串口,向串口里写数据,再把串口关闭掉。可是发现一个问题。内存一直在增长,最后溢出。报nUnsetOwner: Error 8 in MapViewOfFileException in thread "Thread-2" java.lang.OutOfMemoryError: unable to create new native thread 有谁遇到过这样的问题。 问题补充:import java.util.Vector;public class test3 implements Runnable{public static void main(String args[]) { test3 bcb = new test3(); Thread t = new Thread(bcb); t.start(); }public void run() {// TODO Auto-generated method stubwhile (true) {this.findAllList();try {Thread.sleep(20000);} catch (InterruptedException e) {e.printStackTrace();}}}public void findAllList(){BrilliantCommonImpl bci = new BrilliantCommonImpl();Vector base = bci.getAllCharacterSendBase();//查询所有的COM口if(base!=null&&base.size()>0){for(int i=0;i<base.size();i++){Vector details = (Vector)base.get(i);String videoId =(String)details.get(0);String assetSite = "255" ;String comPort = (String)details.get(3);String sendDigit = "9600";// 初始化串口SerialCommunication1 port = new SerialCommunication1(comPort);if (port.checkComport(comPort)) {// 判断串口是否有效port.open(sendDigit);//打开串口Vector details1 = bci.getAllCharacterSendDetails(videoId);if (details1 != null && details1.size() > 0) {for (int j = 0; j < details1.size(); j++) {Vector details2 = (Vector)details1.get(j);String csdId = (String) details2.get(0);String lineId = (String) details2.get(1);String rowId = (String) details2.get(2);String systemType = (String) details2.get(3);String tagCode = (String) details2.get(4);String information = (String) details2.get(5);String uom = (String)details2.get(6);String realData = "";if (tagCode != null && tagCode.trim().length() > 0) {String key = "001" + systemType + "real";realData = bci.getRealData(key,tagCode);}String dealInformation = bci.dealInformation(information, realData,uom);byte[] sendData = bci.dealData(lineId, rowId, assetSite, dealInformation);port.write1(sendData);// 向串口里写东西System.out.println("端口="+comPort+",数据="+sendData); }}port.close1();//关闭串口}}}}}import java.util.*;import java.io.*;import javax.comm.*;public class SerialCommunication1{String portName;CommPortIdentifier portId; InputStream inputStream; OutputStream outputStream; SerialPort serialPort;public SerialCommunication1(String comPort){//创建一个名字为 "COM"+n 的串口通信对象Enumeration portList=CommPortIdentifier.getPortIdentifiers();while (portList.hasMoreElements()){portId = (CommPortIdentifier)portList.nextElement(); if (portId.getPortType()==CommPortIdentifier.PORT_SERIAL) { if(portId.getName().equals(comPort)) {portName=comPort;break;} } else {System.out.println("找不到串口!"+comPort);}}}public boolean checkComport(String comPort){//创建一个名字为 "COM"+n 的串口通信对象if(portId.getName().equals(comPort)){return true;}else{return false;}}public void open(String sendDigit){//打开串口以及输入输出流try{serialPort=(SerialPort)portId.open("Serial_Communication", 2000);}catch(PortInUseException e){System.out.println(portId.getName()+"端口正被占用!");} try {serialPort.setSerialPortParams(Integer.valueOf(sendDigit),SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);} //Integer.valueOf(sendDigit) 设置串口速率 //SerialPort.DATABITS_8 数据位8位 // SerialPort.STOPBITS_1 停止位1们 //SerialPort.PARITY_NONE 奇偶校验无 catch(UnsupportedCommOperationException e){System.out.println("不支持通信");} try { outputStream=serialPort.getOutputStream(); inputStream=serialPort.getInputStream(); } catch(IOException e){System.out.println("无法初始化输入输出流!");} serialPort.notifyOnDataAvailable(true);}public void write1(byte[]s){ try {outputStream.write(s); outputStream.flush(); } catch(IOException e){System.out.println("往串口写入结尾发生错误!");}}public void close1(){try{ outputStream.close(); inputStream.close(); }catch(IOException e){System.out.println("输入输出流关闭失败!");}finally{serialPort.close();}}}

解决方案

每20秒循环一次,第一次循环所有的串口发数据时有问题吗?
解决方案二:
代码贴一下

时间: 2024-12-24 21:10:10

java 实现串口通信 循环打开串口 内存一直在增加 最后溢出的相关文章

c#-C#串口通信问题,串口助手调试和真机测试不一样

问题描述 C#串口通信问题,串口助手调试和真机测试不一样 我用的两台电脑装串口助手来测试发送信息,发送的是16进制信息.通过串口调试助手测试发送的信息是没有问题的.然后链接机器发送信息,机器没反映,用串口助手发送信息机器能正常运行,大神能指出哪里可能出问题? 解决方案 C# 串口通信调试助手1编程练习:串口通信调试助手 解决方案二: 串口助手发送能正常,那就建议看看你的串口初始化吧.

Android 串口通信编程及串口协议分析_Android

Android 串口通信编程:嵌入式编程和可穿戴设备及智能设备都会用到串口,这里就带大家分析下, 一,android串口通信 串口通信采用一个第三方开源项目,实现串口数据收发. 1. 使用了http://code.google.com/p/android-serialport-api/的项目的serialport api和jni: 2. 支持4串口同时收发,有定时自动发送功能,收发模式可选Txt或Hex模式: 3.  n,8,1,没得选: 4. 为减轻界面卡顿的情况,接收区的刷新采用单独的线程进

C#结合串口通信类实现串口通信源代码

mycom是串口通信类.下面是串口通讯测试程序的源代码,将mycom类放在此项目中,可以实现简单的串口通信,希望读者能通过这个程序对串口通信过程有一个初步的了解: using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Threading; namesp

串口通信-MFC的串口接收GPS的问题

问题描述 MFC的串口接收GPS的问题 硬件:工控机(5个USB串口),GPS模块(USB口),一对无线串口通信模块(USB口) 软件:一个双串口软件,串口调试助手 问题:软件打开GPS的串口收不到数据,但是打开无线通信模块,通过另一台电脑可以收到数据.GPS在串口调试助手却是可以收到数据的. 最奇怪的是如果将软件在笔记本电脑上运行,两个串口是都收得到数据的. 软件程序也没有报错,调试了半天,GPS串口是打开的,就是收不到数据.也不知道怎么调试的.... 总之,就是GPS模块在工控机的MFC软件

串口通信-casio dt930 串口发送数据

问题描述 casio dt930 串口发送数据 最近在做 casio dt930的盘点机,有一个问题是需要和pc端的一个系统进行数据对接,是直接将保存的数据通过串口通信发送出来,这该如何操作?谢谢了.

串口通信-android蓝牙串口接收数据

问题描述 android蓝牙串口接收数据 最近在做android手机蓝牙和单片机通信,一直被接收数据完整性这个问题困扰. 为了使一次通信的包保持完整,我就构思了发送12位的包,包头(1)+数据(8)+校验(2)+包尾(1),校验为求和校验.单片机发送数据的函数如下 void SendString(uchar *dat) //发送12位的包 包头(1)+数据(8)+校验(2)+包尾(1) { uchar i,j; uint check=0; //求和校验 SendChar(0x01); //0x0

串口通信-用linux串口与PLC通信,不通

问题描述 用linux串口与PLC通信,不通 用linux串口与PLC通信,没有返回正确的数据,但是在windows串口上是可以的,也就是说波特率一些的应该是对的.但是在linux上就是不行,这是什么原因. 解决方案 linux串口通信协议编程详解 解决方案二: 先多加一些调试信息等,看你的代码是如何运行的,是否有哪一步出错了

串口通信-win7通过串口连接linux外设后,如何登录root用户?

问题描述 win7通过串口连接linux外设后,如何登录root用户? 我想自己做一个MFC小工具,功能可以概括为"简易版secureCRT": 现在串口已经通过CreateFile()连接成功,超时.奇偶校验.波特率这些设置貌似也没有问题了. 接下来,我如何得到linux的login:和password:提示符并把用户名root和密码发出去?如何远程打开一个终端从而可以向内核发送linux命令(比如ls.cd这些)? 贴上部分代码吧: BOOL Cserial_comm_win_1D

串口通信校验问题-请教串口校验问题(急急急)

问题描述 请教串口校验问题(急急急) 使用串口精灵截获指令如下:(上位机->下位机)7E C1 02 03 58 C0 01 04 C3 01 09 E7 1E 7E7E C1 02 03 59 C0 01 04 C3 01 09 32 81 7E7E C1 02 03 5A C0 01 04 C3 01 09 5C 29 7E7E C1 02 03 5B C0 01 04 C3 01 09 89 B6 7E......基本都是这样的,当然也有的是发送和返回可以看出58.59....是累加的:倒