- 浏览: 258167 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
申1987:
收藏
Java解析XML文件 -
wangyu2010302660001:
发布成文本Service后,那个testclass就load不 ...
使用URLClassLoader动态加载类 -
joe_zhpf:
thanks 终于理解了..
android touch mode -
wander312:
嗯, 我试的OK.
android findViewById 返回null的问题 -
javetu_7:
你说的也不对,我试了,还是NULL
android findViewById 返回null的问题
Javax.comm简介
Javax.comm是Sun公司提供的,用于开发平台独立的通讯应用程序的扩展API。(ps:这里javax的x很准确地表明了它是一个扩展包,而不是核心包(core package),但由于历史原因,javax下的并不都是扩展包,比如swing包已经是Java核心架构的一部分了,不过为了与Java1.1编码兼容,仍使用javax.swing。)javax.comm可以访问RS232接口(串口)及有限制地访问IEEE-1284(并口)。
下载
需要到其官方主页http://java.sun.com/products/javacomm/下载这个API,目前的最新版本是3.0。不过可惜的是,Sun目前没有推出此API在Windows平台下的3.0版本,主页上列出的三个版本,分别是运行在x86和Sparc结构下的Solaris系统,以及x86下的Linux系统。要下载Windows版本只能去寻找较老的版本了。我所找到的2个网址是http: //llk.media.mit.edu/projects/cricket/software/javaSerial.zip(两个文件夹里面有所需的 3个文件),http://mdubuc.freeshell.org/Jolt/javacomm20-win32.zip和(完整的2.0版本,还有 examples)。
安装
这里的所谓安装就是把三个重要的文件放到指定的目录下。
将下载的文件解压缩后,在\javacomm20-win32\commapi目录下有必需的三个文件comm.jar,javax.comm. properties和win32comm.dll。将文件comm.jar拷贝到%JAVA_HOME%\jre\lib\ext;文件 javax.comm. properties拷贝到%JAVA_HOME%\jre\lib; 文件win32comm.dll拷贝到%JAVA_HOME%\bin。注意%JAVA_HOME%是jdk的路径,而非jre。
API
在javax.comm下有13个类和接口,分别是
4个接口
CommDriver 可负载设备(the loadable device)驱动程序接口的一部分
CommPortOwnershipListener 传递各种通讯端口的所有权事件
ParallelPortEventListener 传递并行端口事件
SerialPortEventListener 传递串行端口事件
6个类
CommPort 通讯端口
CommPortIdentifier通讯端口管理
ParallelPort 并行通讯端口
ParallelPortEvent 并行端口事件
SerialPort RS-232串行通讯端口
SerialPortEvent 串行端口事件
3个异常类
NoSuchPortException 当驱动程序不能找到指定端口时抛出
PortInUseException 当碰到指定端口正在使用中时抛出
UnsupportedCommOperationException 驱动程序不允许指定操作时抛出
实例
同API一起下载的还有一个examples文件,里面有6个程序。首先看最简单的读、写程序。
读串口的例程
上面两个例程都经过了简化,在打开端口,并且传输结束后没有关闭数据流和串口。在例程中我们看到CommPortIdentifier提供了打开通讯端口的方法open,但却没有相应关闭端口的方法,关闭端口需要调用javax.comm.CommPort类的close()。CommPort是这个包中的一个高级抽象,它定义了端口可作的各种事情:获取I/O数据流对象,控制缓冲区大小,调整输入的处理。
Javax.comm是Sun公司提供的,用于开发平台独立的通讯应用程序的扩展API。(ps:这里javax的x很准确地表明了它是一个扩展包,而不是核心包(core package),但由于历史原因,javax下的并不都是扩展包,比如swing包已经是Java核心架构的一部分了,不过为了与Java1.1编码兼容,仍使用javax.swing。)javax.comm可以访问RS232接口(串口)及有限制地访问IEEE-1284(并口)。
下载
需要到其官方主页http://java.sun.com/products/javacomm/下载这个API,目前的最新版本是3.0。不过可惜的是,Sun目前没有推出此API在Windows平台下的3.0版本,主页上列出的三个版本,分别是运行在x86和Sparc结构下的Solaris系统,以及x86下的Linux系统。要下载Windows版本只能去寻找较老的版本了。我所找到的2个网址是http: //llk.media.mit.edu/projects/cricket/software/javaSerial.zip(两个文件夹里面有所需的 3个文件),http://mdubuc.freeshell.org/Jolt/javacomm20-win32.zip和(完整的2.0版本,还有 examples)。
安装
这里的所谓安装就是把三个重要的文件放到指定的目录下。
将下载的文件解压缩后,在\javacomm20-win32\commapi目录下有必需的三个文件comm.jar,javax.comm. properties和win32comm.dll。将文件comm.jar拷贝到%JAVA_HOME%\jre\lib\ext;文件 javax.comm. properties拷贝到%JAVA_HOME%\jre\lib; 文件win32comm.dll拷贝到%JAVA_HOME%\bin。注意%JAVA_HOME%是jdk的路径,而非jre。
API
在javax.comm下有13个类和接口,分别是
4个接口
CommDriver 可负载设备(the loadable device)驱动程序接口的一部分
CommPortOwnershipListener 传递各种通讯端口的所有权事件
ParallelPortEventListener 传递并行端口事件
SerialPortEventListener 传递串行端口事件
6个类
CommPort 通讯端口
CommPortIdentifier通讯端口管理
ParallelPort 并行通讯端口
ParallelPortEvent 并行端口事件
SerialPort RS-232串行通讯端口
SerialPortEvent 串行端口事件
3个异常类
NoSuchPortException 当驱动程序不能找到指定端口时抛出
PortInUseException 当碰到指定端口正在使用中时抛出
UnsupportedCommOperationException 驱动程序不允许指定操作时抛出
实例
同API一起下载的还有一个examples文件,里面有6个程序。首先看最简单的读、写程序。
读串口的例程
import java.io.*; import java.util.*; import javax.comm.*; public class SimpleRead implements Runnable, SerialPortEventListener { static CommPortIdentifier portId; static Enumeration portList;//枚举类 InputStream inputStream; SerialPort serialPort; Thread readThread; public static void main(String[] args) { portList = CommPortIdentifier.getPortIdentifiers();/*不带参数的getPortIdentifiers方法获得一个枚举对象,该对象又包含了系统中管理每个端口的CommPortIdentifier对象。注意这里的端口不仅仅是指串口,也包括并口。这个方法还可以带参数。getPortIdentifiers(CommPort)获得与已经被应用程序打开的端口相对应的CommPortIdentifier对象。 getPortIdentifier(String portName)获取指定端口名(比如“COM1”)的CommPortIdentifier对象。*/ while (portList.hasMoreElements()) { portId = (CommPortIdentifier) portList.nextElement(); if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)/*getPortType方法返回端口类型*/ { // if (portId.getName().equals("COM1"))/* 找Windows下的第一个串口*/ { if (portId.getName().equals("/dev/term/a"))/*找Unix-like系统下的第一个串口*/ { SimpleRead reader = new SimpleRead(); } } } } public SimpleRead() { try { serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);/* open方法打开通讯端口,获得一个CommPort对象。它使程序独占端口。如果端口正被其他应用程序占用,将使用 CommPortOwnershipListener事件机制,传递一个PORT_OWNERSHIP_REQUESTED事件。每个端口都关联一个 InputStream 何一个OutputStream。如果端口是用open方法打开的,那么任何的getInputStream都将返回相同的数据流对象,除非有close 被调用。有两个参数,第一个为应用程序名;第二个参数是在端口打开时阻塞等待的毫秒数。*/ } catch (PortInUseException e) {} try { inputStream = serialPort.getInputStream();/*获取端口的输入流对象*/ } catch (IOException e) {} try { serialPort.addEventListener(this);/*注册一个SerialPortEventListener事件来监听串口事件*/ } catch (TooManyListenersException e) {} serialPort.notifyOnDataAvailable(true);/*数据可用*/ try { serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);/*设置串口初始化参数,依次是波特率,数据位,停止位和校验*/ } catch (UnsupportedCommOperationException e) {} readThread = new Thread(this); readThread.start(); } public void run() { try { Thread.sleep(20000); } catch (InterruptedException e) {} } //串口事件 public void serialEvent(SerialPortEvent event) { switch(event.getEventType()) { case SerialPortEvent.BI:/*Break interrupt,通讯中断*/ case SerialPortEvent.OE:/*Overrun error,溢位错误*/ case SerialPortEvent.FE:/*Framing error,传帧错误*/ case SerialPortEvent.PE:/*Parity error,校验错误*/ case SerialPortEvent.CD:/*Carrier detect,载波检测*/ case SerialPortEvent.CTS:/*Clear to send,清除发送*/ case SerialPortEvent.DSR:/*Data set ready,数据设备就绪*/ case SerialPortEvent.RI:/*Ring indicator,响铃指示*/ case SerialPortEvent.OUTPUT_BUFFER_EMPTY:/*Output buffer is empty,输出缓冲区清空*/ break; case SerialPortEvent.DATA_AVAILABLE:/*Data available at the serial port,端口有可用数据。读到缓冲数组,输出到终端*/ byte[] readBuffer = new byte[20]; try { while (inputStream.available() > 0) { int numBytes = inputStream.read(readBuffer); } System.out.print(new String(readBuffer)); } catch (IOException e) {} break; } } } (PS:不推荐Thread的这种用法,详见《Core Java VolumeII》) 写串口的例程 把字符串"Hello, world!\n"写到系统的第一个串口 import java.io.*; import java.util.*; import javax.comm.*; public class SimpleWrite { static Enumeration portList; static CommPortIdentifier portId; static String messageString = "Hello, world!\n"; static SerialPort serialPort; static OutputStream outputStream; public static void main(String[] args) { portList = CommPortIdentifier.getPortIdentifiers(); while (portList.hasMoreElements()) { portId = (CommPortIdentifier) portList.nextElement(); if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { // if (portId.getName().equals("COM1")) { if (portId.getName().equals("/dev/term/a")) { try { serialPort = (SerialPort) portId.open("SimpleWriteApp", 2000); } catch (PortInUseException e) {} try { outputStream = serialPort.getOutputStream(); } catch (IOException e) {} try { serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (UnsupportedCommOperationException e) {} try { outputStream.write(messageString.getBytes()); } catch (IOException e) {} } } } } }
上面两个例程都经过了简化,在打开端口,并且传输结束后没有关闭数据流和串口。在例程中我们看到CommPortIdentifier提供了打开通讯端口的方法open,但却没有相应关闭端口的方法,关闭端口需要调用javax.comm.CommPort类的close()。CommPort是这个包中的一个高级抽象,它定义了端口可作的各种事情:获取I/O数据流对象,控制缓冲区大小,调整输入的处理。
发表评论
-
区别在于内存分配的方式,allocate分配的内存在jvm管理范围内,directAllocate分配的内存则不是由jvm管理,可以理解成是类似 C++那种分配
2010-05-25 11:15 1549区别在于内存分配的方式,allocate分配的内存在jvm管理 ... -
java中ArrayList 、LinkList区别
2010-05-25 11:02 165131.ArrayList是实现了基于动态数组的数据结 ... -
谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
2010-05-20 15:24 1146这是一篇程序员写 ... -
HashCode的作用
2010-05-18 14:09 5258首先,想要明白hashCode ... -
hashTable与HashMap区别
2010-05-07 09:50 1570HashTable的应用非常广泛, HashMap ... -
java String详解
2010-01-15 11:11 2683Java字符串类(java.lang.String)是Jav ... -
java 读xml
2009-12-25 16:05 863DocumentBuilderFactory factory ... -
抽象类实现接口,可以不实现其中的抽象方法
2009-12-03 13:20 1970抽象类实现接口,可以不实现其中的抽象方法,而将抽象方法的实现交 ... -
linux命令grep
2009-07-08 11:24 1424grep "key" xxx.log时输出 ... -
子类覆盖问题的解释
2009-07-07 16:31 1001如果子类没有重写父类的方法,调用父类的方法的时候,实际上是去父 ... -
关于字符集转换的本质问题。
2009-03-13 15:36 1449UTF-8 UTF-16BE UTF-16LE GB2312 ... -
java.lang.class类入门的介绍
2008-10-17 15:05 1442前言:Java的类库日益庞大,所包含的类和接口也不计其数。但其 ... -
内部类的介绍
2008-10-14 10:52 931提起Java内部类(Inner Class)可能很多人不太熟悉 ... -
java.io中的设计模式
2008-08-19 14:18 1548我想任何一本介绍模式的书在讲到Decorator模式的 ... -
使用Graphics2D画虚线和设置线的宽度
2008-07-31 15:50 11706public void paint(Graphics ... -
java变量基础
2008-07-30 10:35 1278变量 变量是指? 变量是存放 ... -
reader和stream的区别
2008-07-24 10:47 3011java.io.Reader 和 java.io.InputS ... -
111
2008-07-10 20:01 864hang out with: spend time with -
多线程的一些问题
2008-07-08 14:35 1056Java的线程编程非常简单。但有时会看到一些关于线程的错误用 ... -
Java命令行应用
2008-06-30 10:40 1233主要介绍java和javac命令的使用, 分带package和 ...
相关推荐
JAVAX.COMM下载以及实现串口通讯-附件资源
这是我使用的开发JAVA串口通讯的文件,里面含有小例程,希望对各位有用!
Java 的串口通讯类包,将下载的文件解压缩后,在\javacomm20-win32\commapi目录下有必需的三个文件comm.jar,javax.comm. properties和win32comm.dll。将文件comm.jar拷贝到%JAVA_HOME%\jre\lib\ext;文件javax.comm....
1 串口通信简介... 1 1.1 常见的Java串口包... 1 1.2 串口包的安装(Windows下)... 1 2 串口API概览... 2 2.1 javax.comm.CommPort2 2.2 javax.comm.CommPortIdentifier3 2.3 javax.comm.SerialPort3 2.4 ...
java串口通信包javacomm20-win32.zip Javax.comm是Sun公司提供的,用于开发平台独立的通讯应用程序的扩展API。(ps:这里javax的x很准确地表明了它是一个扩展包,而不是核心包(core package),但由于历史原因,...
Javax.comm简介.doc KEIL中如何用虚拟串口调试串口程序.doc Message PDU编码规则.doc QHDQ-29DDDAD3A0.LOG SMSLib串口通信.doc 串口常用参数.doc 关于java使用javacomm20.doc 常见的进制转换方法.doc 浅谈Java串行...
在简单介绍ZigBee技术的基础上,论述了在Java程序中利用javax.comm开发包中的类实现微机的RS-232串口与ZigBee模块通信的方法。
RXTX项目提供了Windows,Linux,Mac OS X,Solaris操作系统下的兼容性,javax.comm 串口通讯包API的实现,为其他研发人员在此类系统下研发串口应用提供了相当的方便。
适用于64位机器的串口通讯,解压到本地就行,RXTX项目提供了Windows,Linux,Mac OS X,Solaris操作系统下的兼容性,javax.comm 串口通讯包API的实现,为其他研发人员在此类系统下研发串口应用提供了相当的方便。
所以研究了一下在Java下使用短信猫,网上很多资料都是使用的smslib的jar包来发送短信,但是这种方式只支持32的jdk,而我的系统使用的是linux的64位环境,所以最后采用了用RXTX串口通讯工具直接向短信猫发送AT指令的...
java与硬件通讯的jar文件,其中包括RXTXcomm.jar(64位环境)、win32com.dll和javax.comm.properties 欢迎下载
每个平台的dll或so都有 RXTX是个提供串口和并口通信的开源... RXTX项目提供了Windows,Linux,Mac os X,Solaris操作系统下的兼容javax.comm串口通讯包API的实现,为其他研发人员在此类系统下研发串口应用提供了相当的方便
Java实现串口全双工通讯 本类库中使用了Java Communication API(javax.comm)。 本程序在Windows 2000 + Java SDK 1.3环境下编译通过并成功运行
本类库中使用了Java Communication API (javax.comm)。这是一个Java 扩展类库,并不包括 在标准的Java SDK 当中。如果你尚未安装这个扩展类库的话,你应该从Sun 公司的Java 站 点下载这个类库并将其安装在你的系统上...
串口程序的Java实现,需要有javax.comm通讯包的支持,亲自运行测试通过的程序。
Java串口通信 演示了java串口通讯的基本过程。 javax.comm.CommPort 这是用于描述一个被底层系统支持的端口的抽象类。它包含一些高层的IO控制方法,这些方法对于所有不同的通讯端口来说是通用的。