一个Java读取串口值的类

合集下载

java 串口监听 实例

java 串口监听 实例

java 串口监听实例
要实现Java串口监听,你需要使用Java提供的m或者Java Communications API来进行串口通讯。

首先你需要确保你的系统上已经安装了Java Communications API,并且你的开发环境已经配置好了相应的库文件。

接下来,你需要创建一个串口监听器类,这个类需要实现m的SerialPortEventListener接口。

在这个类中,你需要实现serialEvent方法,这个方法会在串口事件发生时被调用。

在这个方法中,你可以编写处理串口事件的代码,比如接收串口数据、处理数据等。

接下来,你需要打开串口并添加监听器。

首先获取一个串口对象,然后使用串口对象的addEventListener方法将你创建的串口监听器类实例添加进去。

然后打开串口并设置串口参数,最后就可以开始监听串口事件了。

在串口监听器类中,你可以编写逻辑来处理串口事件,比如读取串口数据、解析数据、做出相应的处理等。

需要注意的是,在串口通讯中,可能会涉及到一些线程同步的问题,你需要确保在处理
串口数据时是线程安全的。

除了上述方法,你还可以使用一些第三方库来简化串口通讯的操作,比如jSerialComm、RXTX等。

这些库提供了更加简洁易用的API,可以帮助你更快速地实现串口监听功能。

总的来说,实现Java串口监听需要你熟悉Java串口通讯的相关知识,了解串口事件的处理机制,以及如何使用相应的API来实现串口监听功能。

希望以上信息能够对你有所帮助。

java读写串口数据你了解多少

java读写串口数据你了解多少

java读写串⼝数据你了解多少⽬录1.导⼊⽀持java串⼝通信的jar包:2.编写代码操作串⼝:总结最近接触到了串⼝及其读写,在此记录java进⾏串⼝读写的过程。

1.导⼊⽀持java串⼝通信的jar包:在maven项⽬的pom.xml中添加RXTXcomm的依赖或者下载RXTXcomm.jar并导⼊到项⽬中。

⽀持Java串⼝通信操作的jar包,m⽐较⽼,⽽且不⽀持64位系统,推荐使⽤Rxtx这个jar包(32位/64位均⽀持)。

下载地址:注意:运⾏过程中抛出ng.UnsatisfiedLinkError错误或gnu.io下的类找不到时,将rxtx解压包中的rxtxParallel.dll,rxtxSerial.dll 这两个⽂件复制到C:\Windows\System32 ⽬录下可解决该错误。

2.编写代码操作串⼝:串⼝必要参数类:包含连接串⼝所必须的参数,⽅便在调⽤串⼝时设置和传递串⼝参数/*** 串⼝必要参数接收类* @author: LinWenLi* @date: 2018年7⽉21⽇下午4:30:40*/public class ParamConfig {private String serialNumber;// 串⼝号private int baudRate; // 波特率private int checkoutBit; // 校验位private int dataBit; // 数据位private int stopBit; // 停⽌位public ParamConfig() {}/*** 构造⽅法* @param serialNumber 串⼝号* @param baudRate 波特率* @param checkoutBit 校验位* @param dataBit 数据位* @param stopBit 停⽌位*/public ParamConfig(String serialNumber, int baudRate, int checkoutBit, int dataBit, int stopBit) {this.serialNumber = serialNumber;this.baudRate = baudRate;this.checkoutBit = checkoutBit;this.dataBit = dataBit;this.stopBit = stopBit;}getter()...setter()...}串⼝操作类:(其中包含的CustomException是⾃定义异常类,仅⽤于抛出异常原因。

java串口读取源代码

java串口读取源代码
{
portId=(CommPortIdentifier)portList.nextElement(); //获取系统中所有的通信端口
if(portId.getPortType()==CommPortIdentifier.PORT_PARALLEL) //用循环找出所需的端口
TextArea in_message=new TextArea();
TextField out_message=new TextField("上面的文本框显示接收到得数据");
R_Frame() //设置窗口和布局
{ super("串口接收数据");
{
R_Frame R_win =new R_Frame();
R_win.addWindowListener(new WindowAdapter()
{public void windowClosing(WindowEvent e)
{System.exit(0);}
}
class R_Frame extends Frame implements Runnable,ActionListener,SerialPortEventListener
{ static CommPortIdentifier portId;//检测系统中可用的通信端口
static Enumeration portList;//Enumeration为枚举型类,在java。util中
catch (UnsupportedCommOperationException e){}
byte[] readBuffer=new byte[20];
try
{

java串口编程,java串口通信,监听者模式解析

java串口编程,java串口通信,监听者模式解析

java调用coms端口串口通信的方法。

首先需要下到串口驱动。

javacomm20-win32.zip去sun的主页应该有下的。

在这个驱动中有comm.jar,m.properties,win32com.dll这么3个重要的文件。

1、首先配置驱动,把m.properties,win32com.dll拷贝到你的jdk 中具体位置为C:\Program Files\Java\jdk1.6.0_06\bin然后配置windows系统环境变量,在path中加入C:\ProgramFiles\Java\jdk1.6.0_06\bin;打开你的java工程,配置user library,并导入comm.jar包。

2、现在就可以开始写代码了。

串口读写代码如下CommPortIdentifier portID =CommPortIdentifier.getPortIdentifier(com);//1,先拿到Identifier//其中com是String类型的,传入的是串口名com="COM1";SerialPort port = (SerialPort)portID.open("MyComm", 100000000);//2,打开串口//"MyComm"是串口名,100000000是串口过期时间(ms)。

port.setSerialPortParams(rate, databits,stopbit, parity);//3,设置串口属性//rate 波特率(默认9600),databits载波位(默认8),stopbit停止位(默认1),parity校验位(默认0无校验)port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);//4(可选)设置数据流控制模式,默认为无port.close();//关闭串口3、串口读入写出流。

java 串口通信案例

java 串口通信案例

java 串口通信案例Java串口通信是指使用Java编程语言实现与串口设备之间的数据通信。

串口通信在很多应用场景中都有广泛的应用,比如物联网、工业自动化、智能家居等领域。

本文将列举十个以Java串口通信为题的案例,介绍其实现方法和应用场景。

1. 串口读取数据通过Java编程语言实现串口读取数据的功能,可以使用Java的串口通信库,如RXTX、JavaComm等。

首先需要打开串口,并设置串口参数,然后通过监听串口数据的方式实时读取串口传入的数据。

这个案例适用于需要实时监控串口设备数据的应用场景,比如环境监测。

2. 串口发送数据通过Java编程语言实现串口发送数据的功能,可以使用Java的串口通信库。

首先需要打开串口,并设置串口参数,然后通过写入数据的方式将数据发送到串口设备。

这个案例适用于需要向串口设备发送指令或数据的应用场景,比如控制外部设备。

3. 串口数据解析通过Java编程语言实现串口数据解析的功能,可以将从串口读取的原始数据进行解析,提取出有用的信息。

可以根据数据格式进行解析,比如按照特定的协议解析数据。

这个案例适用于需要对串口设备传输的数据进行处理和分析的应用场景。

4. 串口数据存储通过Java编程语言实现串口数据存储的功能,可以将从串口读取的数据保存到本地文件或数据库中。

可以根据需求选择适当的存储方式,比如文本文件、二进制文件或数据库。

这个案例适用于需要对串口设备传输的数据进行长期存储和分析的应用场景。

5. 串口数据转发通过Java编程语言实现串口数据转发的功能,可以将从一个串口读取的数据转发到另一个串口。

可以实现串口设备之间的数据交互,比如串口设备之间的数据通信或设备之间的数据同步。

这个案例适用于需要多个串口设备之间进行数据交互的应用场景。

6. 串口数据监控通过Java编程语言实现串口数据监控的功能,可以监控串口设备的状态和传输数据。

可以实时显示串口设备的连接状态、波特率、数据位、停止位等信息,并实时显示串口传输的数据。

Java 串口通讯 RS232

Java 串口通讯 RS232

通过comm.jar等配置如果用applet应用程序的话,下面这个函数是可以取到串口的,但是如果通过web应用程序(或者通过jsp调用)却取不到串口,而且也不会抛出异常,感觉很奇怪,特来请教!CommPortIdentifier.getPortIdentifiers();同时目标机器的java运行环境也需要把w32comm.dll, comm.jar xxx.proper等放到相应的目录就是用ibm的包而不用sun的comm包:ibm-javacomm-win32-x86.zip只需要把comm驱动包这个类的装载更新一下即/serialcomm.htm利用Java实现串口全双工通讯一个嵌入式系统通常需要通过串口与其主控系统进行全双工通讯,譬如一个流水线控制系统需要不断的接受从主控系统发送来的查询和控制信息,并将执行结果或查询结果发送回主控系统。

本文介绍了一个简单的通过串口实现全双工通讯的Java类库,该类库大大的简化了对串口进行操作的过程。

本类库主要包括:SerialBean.java (与其他应用程序的接口), SerialBuffer.java(用来保存从串口所接收数据的缓冲区), ReadSerial.java (从串口读取数据的程序)。

另外本类库还提供了一个例程SerialExample.java 作为示范。

在下面的内容中将逐一对这几个部分进行详细介绍。

1. SerialBeanSerialBean是本类库与其他应用程序的接口。

该类库中定义了SerialBean的构造方法以及初始化串口,从串口读取数据,往串口写入数据以及关闭串口的函数。

具体介绍如下:本函数构造一个指向特定串口的SerialBean,该串口由参数PortID所指定。

PortID = 1 表示COM1,PortID = 2 表示COM2,由此类推。

本函数初始化所指定的串口并返回初始化结果。

如果初始化成功返回1,否则返回-1。

java读取硬件串口——数据断行问题

java读取硬件串口——数据断行问题

java读取硬件串口——数据断行问题如题,因为项目上的需要,让我使用Java读取硬件外设的串口数据并进行处理。

之前也有C语言的基础,使用过串口读写程序,觉得挺简单的,,没放在心上。

毕竟串口这也算是各种语言里面最基础的应用了吧,大的使用步骤都差不多。

结果,出现的各种问题真是让我欲仙欲死啊。

现在把问题的解决方法写一下。

先说一下项目上的要求吧。

我们这个项目需要高精度的GPS(全球定位系统)的定位数据和时间,需要最少5HZ的数据发送频率。

也就是说串口最少每200ms发送一次数据,数据的格式请参阅GPS模块编程之NMEA0183协议。

首先,在解决问题的过程中,参考了一些前辈的经验,感谢前辈们的贡献!本文主要讲解遇到的串口读取数据异常的问题,关于串口的一般讲解和一般方法请参考下面几位前辈的博客:1.Java串口编程:串口数据的发送与监听读取2.Java串口通信详解3.java基于RXTXcomm.jar的串口通信一、Java读取串口的方式目前比较常见的针对Java的串口包有3个来源:一是1998年SUN发布的串口通信API:comm2.0.jar(Windows环境下)和comm3.0.jar(Linux/Solaris环境下);二是IBM的串口通信API;三是一些开源的API。

SUN公司发布的官方串口包已经停止更新,而且目前只支持32位操作系统。

所以只能使用rxtx开发包。

我的开发环境是:•windows7-64bit•java version '1.8.0_151';•mfz-rxtx-2.2-20081207-win-x64.zip注意:1.Windows_64bit可以使用32bit的JDK,但是32位系统不能使用64位JDK。

最好就是操作系统、JDK、JAR包的位数全都保持一致。

2.rxtx下载注意所下载的jar包的位数,不同位数的jar包不能使用。

3.环境配置请参考几位前辈的博客。

java读串口数据

java读串口数据
while (true)
{
c = in.read();
ComBuffer.PutChar(c);
}
} catch (IOException e) {}
ComBuffer.PutChar(c);
}
try
{
FileReader in = new FileReader(ComPort);
try
{
FileReader in = new FileReader(ComPort);
while (true)
{
c = in.read();
}
}
/*
*
* SerialBuffer.java 1.0
* Class that implements the serial buffer
*
* Created: March 27, 2001
*
* Author : Qingye Jiang (John)
* American GNC Corporation
{
try
{
wait();
} catch (InterruptedException e) { }
}
SepMark = Content.indexOf('*');
ReadSerial r1 = new ReadSerial(SB, ComPort);
ReadBuffer r2 = new ReadBuffer(SB);
WriteSerial r3 = new WriteSerial(ComPort);
r1.start();
* qjiang@

java读取串口信息

java读取串口信息

java读取串口信息(一)最近在写一个串口程序,业务用要求要用java web从串口中读取数据,并显示在文本框中。

具体串口中的信息是从一个能扫描条形码(Barcode)的手持设备上获取的,手持设备怎么扫描,怎么将信息写入串口我不用关心,我要做的就是从串口中讲信息读取出来。

经过这几天研究,以及参考各种资料,有些小小的收获,分享给大家。

第一个问题:我笔记本的串口在哪里?说到串口,也许很多人都要怀疑,这都什么年代了,USB设备已经如此普及了,谁还能想起这个老掉牙的通信端口呀?其实,在现实生活中,串口正因为它老,才会在实际使用中经常用到它。

举个简单的例子:工业制造及其设备与计算机之间的通讯、还有在各种电子工厂测试设备的过程中,都无一例外使用的串口。

因为它可以不用像USB设备一样必须有软件驱动的支持才可以进行工作。

现如今,台式电脑基本都还保留着一个串口甚至是两个串口,但是笔记本电脑上的串口,被越来越多的制造商所抛弃。

有很多从事工控、测试等行业的工作人员,选购笔记本的时候,串口成了他们心中的永远的痛。

看似一个简单的接口,对于他们来说是很重要的。

关于什么是串口,串口的分类,以及串口长的什么样子,大家可以去网上搜一下,上一段的主要信息就是要说明:我们现在的笔记本上没有串口 - -!。

第二个问题:没有串口,那我们怎么测试编写串口程序?如今的市面上提供一种usb转串口的工具,具体可以在百度搜索usb转串口,我是去向隔壁部门借的,据说十几块钱一个,当然得需要两个,我们一般测试使用这种九针的就可以了,有了这个东西,那就开始动手吧!如图:我的和这个不一样,我的还带一根延长线。

1、插上u转串设备,安装u转串口的驱动,这时右击我的电脑,选择设备管理器,如果安装成功,就会出现“端口”选项,我的是win7,xp的没做测试。

如图:2、问题又来了,两个串口笔记本是能识别了,但是这两个串口怎么连接起来呢?对此可以去电脑耗材店买一种叫做“串口交叉线”的线,这种线能将两个usb 转换出来的两个串口连接起来(两个usb转成的串口都是带针的口,也就是所谓的公口),这种“串口交叉线”的两头都是母口,所以正好能连接起来。

java读取串口信息

java读取串口信息

java读取串口信息(一)最近在写一个串口程序,业务用要求要用java web从串口中读取数据,并显示在文本框中。

具体串口中的信息是从一个能扫描条形码(Barcode)的手持设备上获取的,手持设备怎么扫描,怎么将信息写入串口我不用关心,我要做的就是从串口中讲信息读取出来。

经过这几天研究,以及参考各种资料,有些小小的收获,分享给大家。

第一个问题:我笔记本的串口在哪里?说到串口,也许很多人都要怀疑,这都什么年代了,USB设备已经如此普及了,谁还能想起这个老掉牙的通信端口呀?其实,在现实生活中,串口正因为它老,才会在实际使用中经常用到它。

举个简单的例子:工业制造及其设备与计算机之间的通讯、还有在各种电子工厂测试设备的过程中,都无一例外使用的串口。

因为它可以不用像USB设备一样必须有软件驱动的支持才可以进行工作。

现如今,台式电脑基本都还保留着一个串口甚至是两个串口,但是笔记本电脑上的串口,被越来越多的制造商所抛弃。

有很多从事工控、测试等行业的工作人员,选购笔记本的时候,串口成了他们心中的永远的痛。

看似一个简单的接口,对于他们来说是很重要的。

关于什么是串口,串口的分类,以及串口长的什么样子,大家可以去网上搜一下,上一段的主要信息就是要说明:我们现在的笔记本上没有串口 - -!。

第二个问题:没有串口,那我们怎么测试编写串口程序?如今的市面上提供一种usb转串口的工具,具体可以在百度搜索usb转串口,我是去向隔壁部门借的,据说十几块钱一个,当然得需要两个,我们一般测试使用这种九针的就可以了,有了这个东西,那就开始动手吧!如图:我的和这个不一样,我的还带一根延长线。

1、插上u转串设备,安装u转串口的驱动,这时右击我的电脑,选择设备管理器,如果安装成功,就会出现“端口”选项,我的是win7,xp的没做测试。

如图:2、问题又来了,两个串口笔记本是能识别了,但是这两个串口怎么连接起来呢?对此可以去电脑耗材店买一种叫做“串口交叉线”的线,这种线能将两个usb 转换出来的两个串口连接起来(两个usb转成的串口都是带针的口,也就是所谓的公口),这种“串口交叉线”的两头都是母口,所以正好能连接起来。

java android串口编程实例

java android串口编程实例

java android串口编程实例在Android上进行串口编程需要使用Android的串口API,这些API允许你与串口设备进行通信。

下面是一个简单的示例,展示了如何在Android 上使用串口API进行编程。

首先,你需要在你的文件中添加以下权限:```xml<uses-permission android:name="_PORT" />```然后,你可以使用以下代码打开串口并进行读写操作:```javaimport ;import ;import ;import ;import ;import ;import ;import ;public class MainActivity extends Activity {private TextView textView;private UsbManager usbManager;private SerialPort serialPort;private InputStream inputStream;private OutputStream outputStream;Overrideprotected void onCreate(Bundle savedInstanceState) {(savedInstanceState);setContentView(_main);textView = (TextView) findViewById();usbManager = (UsbManager) getSystemService(_SERVICE);serialPort = new SerialPort("/dev/ttyUSB0", 9600, 0); // 串口路径和波特率根据实际情况修改inputStream = ();outputStream = ();} catch (IOException e) {();}}Overrideprotected void onResume() {();try {byte[] buffer = new byte[1024];int len;while ((len = (buffer)) != -1) {String data = new String(buffer, 0, len); // 将读取到的数据转换为字符串并显示在TextView上(data);}} catch (IOException e) {();}}Overrideprotected void onPause() { ();try {();();();} catch (IOException e) { ();}}}```。

Java接收串口数据

Java接收串口数据
121
while(in.available()>0)
122
{
123
b=(char)in.read();
124
buf.append(b);
146
buf.delete(0,end+2);// 删除已用数据
147
System.out.printf("--%s--\n",Buf);
148
this.hasData=true;
040
{
041
return InitFail;
042
}
043
catch(TooManyListenersException e)
044
{
045
return InitFail;
107
case SerialPortEvent.OE:
108
case SerialPortEvent.FE:
109
case SerialPortEvent.PE:
110
case SerialPortEvent.CD:
115
break;
116
case SerialPortEvent.DATA_AVAILABLE:
117
118
try
119
{
120
char b;
111
case SerialPortEvent.CTS:
112
case SerialPortEvent.DSR:
113
case SerialPortEvent.RI:
114

基于java数据采集串口通讯的设计和实现_周海涛

基于java数据采集串口通讯的设计和实现_周海涛

基于java 数据采集串口通讯的设计和实现Design and Realization of the Serial Communication forData Acquisition Based On Java(武汉中国地质大学)周海涛高兴锁江晓峰Zhou,Haitao Gao,Xingsuo Jiang,Xiaofeng摘要: 介绍如何编写基于java 的数据采集串口通讯, 结合实际应用, 对采用m 类库进行串口通信设计进行了阐述。

关键词: Java; 串口通信; m; 监听器中图分类号: TP311.52 文献标识码: AAbstract: Introduce the method to implement java based data collecting Serial Communication , Explain the basic procedure to designSerial Communication using m class library with practical applications .Key words: Java; Serial Communication; m; Listener文章编号:1008- 0570(2006)02- 1- 0141- 02引言白沙集团长沙卷烟厂数字化质量管理系统是白沙集团在2004 年实施的一个以提高管理水平和产品质量的崭新的信息化管理系统。

质量管理的过程控制和生产过程中的质量数据采集分析显得非常重要, 数据多、报表多; 较多的手工填表, 容易因笔误而影响结果。

因此, 需要一套自动化过程高、观测快速的数据采集系统软件。

Java 由于具有开放性、平台无关性和面向对象等特性, 使得其成为了一个理想的软件开发平台。

本文作者利用Java 串口通信API 开发了一个用于串口通讯的Java 程序, 大大简化了对串口进行操作的过程,Java 串口通信API (m) 是一个Java 扩展类库, 并不包括在标准的Java2 SDK 当中, 需要进行安装。

Java实现串口通信

Java实现串口通信

这是用Java编写的实现串口通信的程序源代码。

至于支持串口通信的comm.jar 包,请各位从sun或别的网站处下载!这里只提供源码让大家参考。

gui.java算是一个框架;panel.java是面板,相当于前台;SerialCommunication.java是一个JavaBean,相当于后台。

面板视图如下:从串口中读入信息的机制如下:后台监测到有信息读入到缓存,就读取之,用一个字符串变量储存,并置“有新信息读入”的标识(相当于一个开关)为真。

面板有一个计时器监听器,用轮询的方式查询后台的“有新信息读入”的标识是否为真,若为真则马上读入到前台,显示到文本框上,并置“有新信息读入”的标识为假(顺手关门)。

gui.java:import java.awt.*;import javax.swing.*;public class gui{public static void main(String[] args){JFrame frame=new JFrame("密谈");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().add(new panel());frame.pack();frame.setVisible(true);frame.setResizable(false);}}panel.java:import java.awt.*;import java.awt.event.*;import javax.swing.*;public class panel extends JPanel{String SB;JTextArea show;JTextField text;JButton submit,connect,stop;SerialCommunication port;Timer timer;JPanel write;JPanel read;public panel(){SB=new String("");port=new SerialCommunication(1);timer=new Timer(100,new timeListener());show=new JTextArea(20,25);show.setLineWrap(true);show.setAutoscrolls(true);text=new JTextField("",25);submit=new JButton("提交");connect=new JButton("连接");stop=new JButton("断开");write=new JPanel();read=new JPanel();setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));submit.addActionListener(new submitListener());connect.addActionListener(new connectListener());stop.addActionListener(new stopListener());write.setPreferredSize(new Dimension(300,70));write.add(text);write.add(connect);write.add(submit);write.add(stop);write.setBackground(Color.CYAN);read.setPreferredSize(new Dimension(300,375));read.setBackground(Color.yellow);read.add(show);add(read);add(write);}private class submitListener implements ActionListener {//提交按钮的监听器public void actionPerformed(ActionEvent event){String s=text.getText();port.write(s);SB=new String(port.readBuffer());show.append(SB);System.out.println("提交!");}}private class connectListener implements ActionListener {//连接按钮的监听器public void actionPerformed(ActionEvent event){port.open();timer.start();System.out.println("连接!");}}private class stopListener implements ActionListener{//断开按钮的监听器public void actionPerformed(ActionEvent event){port.close();timer.stop();System.out.println("断开!");}}private class timeListener implements ActionListener {//timer的监听器,用作轮询后台public void actionPerformed(ActionEvent event){if(port.dataComes()){SB=new String(port.readBuffer());port.dataHadRead();show.append(SB);repaint();System.out.println("读到数据!");}}}}SerialCommunication.java:import java.util.*;import java.io.*;import m.*;import mPortIdentifier;import java.awt.*;import m.SerialPortEvent.*;import m.SerialPortEventListener.*;public class SerialCommunication{String portName;CommPortIdentifier portId;InputStream inputStream;OutputStream outputStream;SerialPort serialPort;StringBuffer buffer;//串口读入缓存boolean recieve;//有新数据读入的标识public SerialCommunication(int n){//创建一个名字为"COM"+n 的串口通信对象buffer=new StringBuffer("");Enumeration portList=CommPortIdentifier.getPortIdentifiers();while (portList.hasMoreElements()){portId = (CommPortIdentifier)portList.nextElement();if (portId.getPortType()==CommPortIdentifier.PORT_SERIAL){if(portId.getName().equals("COM"+n)){portName="COM"+n;break;}}else{System.out.println("找不到串口!");}}}public void open(){//打开串口以及输入输出流recieve=false;try{serialPort=(SerialPort)portId.open("Serial Communication", 2000);}catch(PortInUseException e){System.out.println("端口正被占用!");}try{serialPort.setSerialPortParams(9600,SerialPort.DA TABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);} catch(UnsupportedCommOperationException e){System.out.println("不支持通信");}try{outputStream=serialPort.getOutputStream();inputStream=serialPort.getInputStream();}catch(IOException e){System.out.println("无法初始化输入输出流!");}try{serialPort.addEventListener(new serialPortListener());}catch (TooManyListenersException e) {System.out.println("监听器太多了!");}serialPort.notifyOnDataAvailable(true);}public void write(String s){//将参数字符串s转换成字节,并将此字节流写入到outputStream中buffer=new StringBuffer("SEND:"+s+"\n");try{outputStream.write(s.getBytes());}catch(IOException e){System.out.println("往串口写入数据时发生错误!");} }public void close(){try{outputStream.close();inputStream.close();}catch(IOException e){System.out.println("输入输出流关闭失败!");}serialPort.close();}public class serialPortListener implements SerialPortEventListener{//监听是否有新数据读入的监听器public void serialEvent(SerialPortEvent event){if(event.getEventType()==SerialPortEvent.DATA_A V AILABLE){//若有新数据传来,则将其转换成字符串,并加进缓存String readResult;byte[] readBuffer=new byte[20];try{while(inputStream.available()>0)inputStream.read(readBuffer);}catch(IOException e){System.out.println(e);System.out.println("从串口读取数据时发生错误!");readResult="";}readResult=new String(readBuffer);buffer=new StringBuffer("RECIEVE:"+readResult+"\n");recieve=true;//然后置新数据读入标识为真}}}public StringBuffer readBuffer()//返回缓存所存储的字符串{System.out.println(buffer);return(buffer);}public boolean dataComes()//判断串口是否有新数据读入{return(recieve);}public void dataHadRead()//此方法可以让外部的应用程序在读取一次数据后置标识为假{recieve=false;}}。

使用java的rxtx类解决串口通讯的具体操作步骤

使用java的rxtx类解决串口通讯的具体操作步骤

使用Java的RXTX类库进行串口通讯的基本步骤如下:1. 导入RXTX类库:在Java项目中,需要导入RXTX类库,以便使用串口通讯功能。

可以从RXTX官方网站下载适合您的操作系统的类库,并将其添加到Java项目中。

2. 打开串口连接:使用RXTX类库中的SerialPort类打开串口连接。

您需要指定串口的端口号以及波特率等参数。

例如:```javaSerialPort serialPort = new SerialPort("COM1");serialPort.openPort();serialPort.setParams(SerialPort.BAUDRATE_9600,SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);```3. 发送数据:使用RXTX类库中的write()方法发送数据。

例如:```javabyte[] data = {0x01, 0x02, 0x03};serialPort.write(data, data.length);```4. 接收数据:使用RXTX类库中的read()方法接收数据。

例如:```javabyte[] buffer = new byte[1024];int length = serialPort.read(buffer, buffer.length);```5. 关闭串口连接:使用RXTX类库中的closePort()方法关闭串口连接。

例如:```javaserialPort.closePort();```以上是使用Java的RXTX类库进行串口通讯的基本步骤。

您可以根据实际需求进行相应的修改和扩展。

使用com0com0模拟串口通信,以及java的串口读写操作

使用com0com0模拟串口通信,以及java的串口读写操作

使⽤com0com0模拟串⼝通信,以及java的串⼝读写操作⾸先放⼀下我这次使⽤的⼯具com0com0是windows内核模式下的虚拟串⼝驱动程序。

可以创建虚拟串⼝对来连接两个COM端⼝在这⾥简单的介绍⼀下com0com0的使⽤⽅法⾸先,下载com0com-3.0.0.0-i386-and-x64-unsigned,解压缩并安装接下来我们就可以使⽤setup command prompt来进⾏模拟串⼝对了在这⾥⾸先介绍两个命令install PortName=串⼝名1 PortName=串⼝名2新建两个虚拟串⼝,并连接为串⼝对list列出⽬前所有的虚拟串⼝如果跳出更新驱动的提⽰可以暂时⽆视,不影响后续的操作。

另⼀个⼯具setup具有图形化界⾯,可以查看⽬前的串⼝对接下来介绍java编程的时候需要⽤到的两个jar包RXTXcomm.jarserialPortIO.jar同时,在使⽤这两个jar包进⾏java编程之前,我们要将mfz-rxtx-2.2-20081207-win-x64压缩包下的两个dll⽂件放到C:\Windows\System32下然后,这⾥是⼀个简单的串⼝读写的例⼦import gnu.io.SerialPort;import serialPort.SerialTool;public class Read {public static void main(String[] args) throws Exception{// TODO Auto-generated method stub//以波特率115200打开串⼝COM12SerialPort serialPort = SerialTool.openPort("COM12", 115200);SerialTool.addListener(serialPort, new SerialListener(serialPort));}}import java.util.Scanner;import gnu.io.SerialPort;import serialPort.SerialTool;public class Write {public static void main(String[] args) throws Exception {Scanner scan = new Scanner(System.in);String temp;//以波特率115200打开串⼝COM11SerialPort serialPort = SerialTool.openPort("COM11", 115200);while(scan.hasNext()){temp=scan.nextLine();SerialTool.sendToPort(serialPort, temp.getBytes());}}}import javax.swing.JOptionPane;import gnu.io.SerialPort;import gnu.io.SerialPortEvent;import gnu.io.SerialPortEventListener;import serialPort.SerialTool;public class SerialListener implements SerialPortEventListener {public SerialPort serialPort;public SerialListener(SerialPort serialPort){this.serialPort=serialPort;}public void serialEvent(SerialPortEvent serialPortEvent) {switch (serialPortEvent.getEventType()) {case SerialPortEvent.BI: // 10 通讯中断System.out.println("与串⼝设备通讯中断");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 串⼝存在可⽤数据//System.out.println("found data");byte[] data = null;try {if (serialPort == null) {System.out.println("串⼝对象为空!监听失败");}else {data = SerialTool.readFromPort(serialPort); //读取数据,存⼊字节数组//System.out.println(new String(data));JOptionPane.showInputDialog(new String(data));//String dataOriginal = new String(data); //将字节数组数据转换位为保存了原始数据的字符串 }} catch (Exception e) {System.exit(0);}break;}}}。

java 串口通信案例

java 串口通信案例

java 串口通信案例Java 串口通信案例Java是一种广泛应用于软件开发的高级编程语言,它具有跨平台、面向对象和安全性等特点。

在很多应用领域中,Java都发挥着重要作用,其中包括串口通信。

串口通信是一种用于在计算机和外部设备之间传输数据的通信方式,它在许多领域中都得到广泛应用,如物联网、工业自动化等。

本文将介绍一个基于Java的串口通信案例,以帮助读者更好地理解和应用串口通信技术。

首先,我们需要了解Java中的串口通信库。

JavaComm是Java平台上用于串口通信的标准库,它提供了一组用于控制和管理串行端口的类和方法。

通过JavaComm库,我们可以轻松地实现串口的打开、关闭、读取和写入等操作。

此外,JavaComm还支持设置串口的波特率、数据位、停止位和校验位等参数,以满足不同应用场景的需求。

接下来,我们将介绍一个简单的Java串口通信案例。

假设我们需要通过串口与一个温湿度传感器进行通信,以获取当前环境的温度和湿度数据。

首先,我们需要导入JavaComm库,并创建一个SerialPort对象来表示串口。

然后,我们可以通过SerialPort对象的open方法打开串口,并通过InputStream和OutputStream对象读取和写入数据。

在读取数据时,我们可以使用BufferedReader类来读取串口接收缓冲区中的数据,并进行相应的处理。

在写入数据时,我们可以使用PrintWriter类将数据发送到串口发送缓冲区。

最后,我们需要通过SerialPort对象的close方法关闭串口。

在实际应用中,我们还可以通过添加事件监听器来实现对串口状态的监控和处理。

例如,我们可以添加一个SerialPortEventListener来监听串口的数据接收事件,并在接收到数据时进行相应的处理。

此外,我们还可以使用定时器来定时发送指令和读取数据,以实现与外部设备的稳定通信。

总结起来,Java提供了强大的串口通信库,使得开发者能够轻松地实现串口通信功能。

使用Java实现串口通信

使用Java实现串口通信

使⽤Java实现串⼝通信本⽂实例为⼤家分享了Java实现串⼝通信的具体代码,供⼤家参考,具体内容如下1.介绍使⽤Java实现的串⼝通信程序,⽀持⼗六进制数据的发送与接收。

源码:效果图如下:2.RXTXcomm内含32位与64位版本使⽤⽅法:拷贝 RXTXcomm.jar 到 JAVA_HOME\jre\lib\ext⽬录中;拷贝 rxtxSerial.dll 到 JAVA_HOME\jre\bin⽬录中;拷贝 rxtxParallel.dll 到 JAVA_HOME\jre\bin⽬录中;JAVA_HOME为jdk安装路径3.串⼝通信管理SerialPortManager实现了对串⼝通信的管理,包括查找可⽤端⼝、打开关闭串⼝、发送接收数据。

package com.yang.serialport.manage;import mPort;import mPortIdentifier;import gnu.io.NoSuchPortException;import gnu.io.PortInUseException;import gnu.io.SerialPort;import gnu.io.SerialPortEventListener;import gnu.io.UnsupportedCommOperationException;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.Enumeration;import java.util.TooManyListenersException;import com.yang.serialport.exception.NoSuchPort;import com.yang.serialport.exception.NotASerialPort;import com.yang.serialport.exception.PortInUse;import com.yang.serialport.exception.ReadDataFromSerialPortFailure;import com.yang.serialport.exception.SendDataToSerialPortFailure;import com.yang.serialport.exception.SerialPortInputStreamCloseFailure;import com.yang.serialport.exception.SerialPortOutputStreamCloseFailure;import com.yang.serialport.exception.SerialPortParameterFailure;import com.yang.serialport.exception.TooManyListeners;/*** 串⼝管理** @author yangle*/public class SerialPortManager {/*** 查找所有可⽤端⼝** @return 可⽤端⼝名称列表*/@SuppressWarnings("unchecked")public static final ArrayList<String> findPort() {// 获得当前所有可⽤串⼝Enumeration<CommPortIdentifier> portList = CommPortIdentifier.getPortIdentifiers();ArrayList<String> portNameList = new ArrayList<String>();// 将可⽤串⼝名添加到List并返回该Listwhile (portList.hasMoreElements()) {String portName = portList.nextElement().getName();portNameList.add(portName);}return portNameList;}/*** 打开串⼝** @param portName* 端⼝名称* @param baudrate* 波特率* @return 串⼝对象* @throws SerialPortParameterFailure* 设置串⼝参数失败* @throws NotASerialPort* 端⼝指向设备不是串⼝类型* @throws NoSuchPort* 没有该端⼝对应的串⼝设备* @throws PortInUse* 端⼝已被占⽤*/public static final SerialPort openPort(String portName, int baudrate) throws SerialPortParameterFailure, NotASerialPort, NoSuchPort, PortInUse {try {// 通过端⼝名识别端⼝CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);// 打开端⼝,设置端⼝名与timeout(打开操作的超时时间)CommPort commPort = portIdentifier.open(portName, 2000);// 判断是不是串⼝if (commPort instanceof SerialPort) {SerialPort serialPort = (SerialPort) commPort;try {// 设置串⼝的波特率等参数serialPort.setSerialPortParams(baudrate,SerialPort.DATABITS_8, SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);} catch (UnsupportedCommOperationException e) {throw new SerialPortParameterFailure();}return serialPort;} else {// 不是串⼝throw new NotASerialPort();}} catch (NoSuchPortException e1) {throw new NoSuchPort();} catch (PortInUseException e2) {throw new PortInUse();}}/*** 关闭串⼝** @param serialport* 待关闭的串⼝对象*/public static void closePort(SerialPort serialPort) {if (serialPort != null) {serialPort.close();serialPort = null;}}/*** 向串⼝发送数据** @param serialPort* 串⼝对象* @param order* 待发送数据* @throws SendDataToSerialPortFailure* 向串⼝发送数据失败* @throws SerialPortOutputStreamCloseFailure* 关闭串⼝对象的输出流出错*/public static void sendToPort(SerialPort serialPort, byte[] order) throws SendDataToSerialPortFailure,SerialPortOutputStreamCloseFailure {OutputStream out = null;try {out = serialPort.getOutputStream();out.write(order);out.flush();} catch (IOException e) {throw new SendDataToSerialPortFailure();} finally {try {if (out != null) {out.close();out = null;}} catch (IOException e) {throw new SerialPortOutputStreamCloseFailure();}}}/*** 从串⼝读取数据** @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();// 获取buffer⾥的数据长度int bufflenth = in.available();while (bufflenth != 0) {// 初始化byte数组为buffer中数据的长度bytes = new byte[bufflenth];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;}/*** 添加监听器** @param port* 串⼝对象* @param listener* 串⼝监听器* @throws TooManyListeners* 监听类对象过多*/public static void addListener(SerialPort port,SerialPortEventListener listener) throws TooManyListeners {try {// 给串⼝添加监听器port.addEventListener(listener);// 设置当有数据到达时唤醒监听接收线程port.notifyOnDataAvailable(true);// 设置当通信中断时唤醒中断线程port.notifyOnBreakInterrupt(true);} catch (TooManyListenersException e) {throw new TooManyListeners();}}}4.程序主窗⼝/** MainFrame.java** Created on 2016.8.19*/package com.yang.serialport.ui;import gnu.io.SerialPort;import gnu.io.SerialPortEvent;import gnu.io.SerialPortEventListener;import java.awt.Color;import java.awt.GraphicsEnvironment;import java.awt.Point;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.List;import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import com.yang.serialport.exception.NoSuchPort;import com.yang.serialport.exception.NotASerialPort;import com.yang.serialport.exception.PortInUse;import com.yang.serialport.exception.SendDataToSerialPortFailure; import com.yang.serialport.exception.SerialPortOutputStreamCloseFailure; import com.yang.serialport.exception.SerialPortParameterFailure;import com.yang.serialport.exception.TooManyListeners;import com.yang.serialport.manage.SerialPortManager;import com.yang.serialport.utils.ByteUtils;import com.yang.serialport.utils.ShowUtils;/*** 主界⾯** @author yangle*/public class MainFrame extends JFrame {/*** 程序界⾯宽度*/public static final int WIDTH = 500;/*** 程序界⾯⾼度*/public static final int HEIGHT = 360;private JTextArea dataView = new JTextArea();private JScrollPane scrollDataView = new JScrollPane(dataView);// 串⼝设置⾯板private JPanel serialPortPanel = new JPanel();private JLabel serialPortLabel = new JLabel("串⼝");private JLabel baudrateLabel = new JLabel("波特率");private JComboBox commChoice = new JComboBox();private JComboBox baudrateChoice = new JComboBox();// 操作⾯板private JPanel operatePanel = new JPanel();private JTextField dataInput = new JTextField();private JButton serialPortOperate = new JButton("打开串⼝");private JButton sendData = new JButton("发送数据");private List<String> commList = null;private SerialPort serialport;public MainFrame() {initView();initComponents();actionListener();initData();}private void initView() {// 关闭程序setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); // 禁⽌窗⼝最⼤化setResizable(false);// 设置程序窗⼝居中显⽰Point p = GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();setBounds(p.x - WIDTH / 2, p.y - HEIGHT / 2, WIDTH, HEIGHT);this.setLayout(null);setTitle("串⼝通讯");}private void initComponents() {// 数据显⽰dataView.setFocusable(false);scrollDataView.setBounds(10, 10, 475, 200);add(scrollDataView);// 串⼝设置serialPortPanel.setBorder(BorderFactory.createTitledBorder("串⼝设置"));serialPortPanel.setBounds(10, 220, 170, 100);serialPortPanel.setLayout(null);add(serialPortPanel);serialPortLabel.setForeground(Color.gray);serialPortLabel.setBounds(10, 25, 40, 20);serialPortPanel.add(serialPortLabel);commChoice.setFocusable(false);commChoice.setBounds(60, 25, 100, 20);serialPortPanel.add(commChoice);baudrateLabel.setForeground(Color.gray);baudrateLabel.setBounds(10, 60, 40, 20);serialPortPanel.add(baudrateLabel);baudrateChoice.setFocusable(false);baudrateChoice.setBounds(60, 60, 100, 20);serialPortPanel.add(baudrateChoice);// 操作operatePanel.setBorder(BorderFactory.createTitledBorder("操作"));operatePanel.setBounds(200, 220, 285, 100);operatePanel.setLayout(null);add(operatePanel);dataInput.setBounds(25, 25, 235, 20);operatePanel.add(dataInput);serialPortOperate.setFocusable(false);serialPortOperate.setBounds(45, 60, 90, 20);operatePanel.add(serialPortOperate);sendData.setFocusable(false);sendData.setBounds(155, 60, 90, 20);operatePanel.add(sendData);}@SuppressWarnings("unchecked")private void initData() {commList = SerialPortManager.findPort();// 检查是否有可⽤串⼝,有则加⼊选项中if (commList == null || commList.size() < 1) {ShowUtils.warningMessage("没有搜索到有效串⼝!");} else {for (String s : commList) {commChoice.addItem(s);}}baudrateChoice.addItem("9600");baudrateChoice.addItem("19200");baudrateChoice.addItem("38400");baudrateChoice.addItem("57600");baudrateChoice.addItem("115200");}private void actionListener() {serialPortOperate.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if ("打开串⼝".equals(serialPortOperate.getText())&& serialport == null) {openSerialPort(e);} else {closeSerialPort(e);}}});sendData.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {sendData(e);}});}/*** 打开串⼝** @param evt* 点击事件*/private void openSerialPort(java.awt.event.ActionEvent evt) {// 获取串⼝名称String commName = (String) commChoice.getSelectedItem();// 获取波特率int baudrate = 9600;String bps = (String) baudrateChoice.getSelectedItem();baudrate = Integer.parseInt(bps);// 检查串⼝名称是否获取正确if (commName == null || commName.equals("")) {ShowUtils.warningMessage("没有搜索到有效串⼝!");} else {try {serialport = SerialPortManager.openPort(commName, baudrate); if (serialport != null) {dataView.setText("串⼝已打开" + "\r\n");serialPortOperate.setText("关闭串⼝");}} catch (SerialPortParameterFailure e) {e.printStackTrace();} catch (NotASerialPort e) {e.printStackTrace();} catch (NoSuchPort e) {e.printStackTrace();} catch (PortInUse e) {e.printStackTrace();ShowUtils.warningMessage("串⼝已被占⽤!");}}try {SerialPortManager.addListener(serialport, new SerialListener()); } catch (TooManyListeners e) {e.printStackTrace();}}/*** 关闭串⼝** @param evt* 点击事件*/private void closeSerialPort(java.awt.event.ActionEvent evt) {SerialPortManager.closePort(serialport);dataView.setText("串⼝已关闭" + "\r\n");serialPortOperate.setText("打开串⼝");}/*** 发送数据** @param evt* 点击事件*/private void sendData(java.awt.event.ActionEvent evt) {// 输⼊框直接输⼊⼗六进制字符,长度必须是偶数String data = dataInput.getText().toString();try {SerialPortManager.sendToPort(serialport,ByteUtils.hexStr2Byte(data));} catch (SendDataToSerialPortFailure e) {e.printStackTrace();} catch (SerialPortOutputStreamCloseFailure e) {e.printStackTrace();}}private class SerialListener implements SerialPortEventListener { /*** 处理监控到的串⼝事件*/public void serialEvent(SerialPortEvent serialPortEvent) {switch (serialPortEvent.getEventType()) {case SerialPortEvent.BI: // 10 通讯中断ShowUtils.errorMessage("与串⼝设备通讯中断");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) {ShowUtils.errorMessage("串⼝对象为空!监听失败!");} else {// 读取串⼝数据data = SerialPortManager.readFromPort(serialport);dataView.append(ByteUtils.byteArrayToHexString(data,true) + "\r\n");}} catch (Exception e) {ShowUtils.errorMessage(e.toString());// 发⽣读取错误时显⽰错误信息后退出系统System.exit(0);}break;}}}public static void main(String args[]) {java.awt.EventQueue.invokeLater(new Runnable() {public void run() {new MainFrame().setVisible(true);}});}}5.写在最后源码下载地址:欢迎同学们吐槽评论,如果你觉得本篇博客对你有⽤,那么就留个⾔或者顶⼀下吧(^-^)感谢:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一个Java读取串口值的类
这是一个通过JAVA的扩展包(m)从串口读取值的类,本类库(m)主要包括:
SerialBean.java (与其他应用程序的接口),
SerialBuffer.java (用来保存从串口所接收数据的缓冲区),
ReadSerial.java (从串口读取数据的程序)。

整个类的设计思路大概就是:
实现一个线程一直在监听串口中是否有数据传送过来,如果有的话开始拍照,并取得照片后,直接打印出来。

因为涉及到商业秘密,所以拍照函数和取得照片函数采用的是空函数,请见谅!
若要运行此函数必须下载该扩展包,并加载到你的CLASSPATH下。

当然,你若要测试并运行此类的话。

可能要花费不少的精力。

如果你只有一台机器,你可以利用一条RS-232电缆将COM1和COM2连接起来,在COM1上运行SerialExample,在COM2上运行Windows提供的超级终端程序。

如果你有两台机器的话,你可以利用一条RS-232电缆将两台机器的COM1(或者是COM2)连接起来,在一端运行例程,另外一端运行Windows提供的超级终端程序。

该类有相当详细的注释。

我想应该不难理解吧!
import java.io.*;
import java.awt.*;
import java.awt.print.*;
import javax.print.*;
import m.*; //这是一个Java扩展类库,并不包括在标准的Java SDK当中。

//如果你尚未安装这个扩展类那么你需要到sun公司的Java站点下载这个类库
class SuanKou implements Runnable{
private java.io.FileOutputStream fos=null;
private Thread th=null;
private long shiJian=500;//设置间隔的时间
//private int duanKou=1;//设置端口号
private String Msg = null;
private SerialBean SB=null;
private int isSucces=-1;
//构造函数
public SuanKou(long sj,int dk) {
System.out.println("构造函数");
try{
fos=new java.io.FileOutputStream("c:\\log.txt");
this.shiJian=sj;//设定监听端口的时间
//this.duanKou=dk;//端口号
SB = new SerialBean(dk);//创建一个接口对象,参数为端口号
isSucces = SB.Initialize();//初使化所指定的串口并返回初始化结果。

如果初始化成功返回1,否则返回-1
th=new Thread(this);//创建一个线程对象
th.start();//创建SuanKou这个对象就开始启动线程
}catch(java.io.FileNotFoundException fe){
fe.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
}
//拍照函数
public void snape() {
System.out.println("拍照函数");
}
//取得照片函数
public void getPicture() {
System.out.println("取得照片函数");
}
//实现线程接口的RUN方法
public void run(){
Thread.sleep(shiJian);
this.ReadSuanKou();
}
//定期到串口读取数据和函数,如果能读到数据就调用snape(),getPicture(),函数,写日志,打印
private void ReadSuanKou() {
//如果初使化成功的话,
if (isSucces == 1) {
//从串口(缓冲区)中读取指定长度的一个字符串。

(500)
try{
Msg = SB.ReadPort(500);
//如果可以从串口读到数据的话
if (Msg != null) {
this.snape();//调用拍照函数
this.getPicture();//调用取得照片函数
java.text.SimpleDateFormat df=new
java.text.SimpleDateFormat("EEEE-MMMM-dd-yyyy");
Date date=new Date();
String dateFormat=df.format(date);
fos.write(dateFormat.getBytes());//在日志文件中记录当前时间
fos.write(Msg.getBytes());//将读到的数据写到日志文件中
//调用打印方法注:若要打印,要打印的对象必须实现java.awt.print.Printable接口。

即getPicture
//返回的对象必须实现该接口,因为不知道getPicture返回什么对象,故这个打印功能无法实现,不过大概的思路是
/** 1,需要一个打印服务对象。

这可通过三种方式实现:
在jdk1.4之前的版本,必须要实现java.awt.print.Printable接口或通过Toolkit.getDefaultToolkit().getPrintJob来获取打印服务对象;
在jdk1.4中则还可以通过javax.print.PrintSerivceLookup来查找定位一个打印服务对象。

2、需要开始一个打印工作。

这也有几种实现方法:在jdk1.4之前可以通过
java.awt.print.PrintJob(jdk1.1提供的,现在已经很少用了)调用print或printAll方法开始打印工作;
也可以通过java.awt.print.PrinterJob的printDialog显示打印对话框,然后通过print 方法开始打印;在jdk1.4中则可以通过javax.print.ServiceUI的printDialog显示打印对话框,然后调用print方法开始一个打印工作。

根据以上的提示去做,不会很难!
*/
java.awt.print.PrinterJob pj=new java.awt.print.PrinterJob();
pj.printDialog();//显示打印对话框
pj.print();//开始打印
}
//SB.WritePort("OK");若要向串口返回一个结果可以调用该函数?
}catch(Exception e){
e.printStackTrace();
}finally{
try{
fos.close();
//停止串口检测进程并关闭串口。

SB.ClosePort();
}catch(Exception e){
e.printStackTrace();
}
}
}
else {
throw RuntimeException("读取串口数据时出错!");
}
}
//主函数
public static void main(String args[]) {
new SuanKou(1000,1);//参数为间隔的时间,和端口号
}
}。

相关文档
最新文档