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个程序。首先看最简单的读、写程序。
//读串口的例程
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();
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")) {
SimpleRead reader = new SimpleRead();
}
}
}
}
public SimpleRead() {
try {
serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
} catch (PortInUseException e) {}
try {
inputStream = serialPort.getInputStream();
} catch (IOException e) {}
try {
serialPort.addEventListener(this);
} 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:
case SerialPortEvent.OE:
case SerialPortEvent.FE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
case SerialPortEvent.DATA_AVAILABLE:
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数据流对象,控制缓冲区大小,调整输入的处理。
分享到:
相关推荐
首先,"java读串口数据.txt"可能是教程文档或者代码示例,它可能会包含以下内容:如何使用Java的SerialPort接口,该接口位于javax.comm包中(虽然这个包现在已不再维护,但仍有第三方库如RXTX、JSSC等提供了类似功能...
Java串口编程是一种在Java应用程序中与硬件设备进行通信的技术,通常用于嵌入式系统、自动化设备或物联网(IoT)应用。这个"CaseSync"可能是项目案例或示例代码的名称,暗示了该压缩包可能包含了一个实现串口通信功能...
Java实现串口通信是计算机编程中的一个重要领域,特别是在嵌入式系统、自动化设备以及物联网(IoT)设备的控制和数据传输中。Java虽然不是直接支持串口操作的语言,但通过一些库和API,我们可以创建应用程序来实现串口...
在Java中,`javax.comm`库是标准的串口通信API,但这个库在Java 6之后不再维护,因此对于较新的Java版本,我们更推荐使用RXTX库,这是一个开源的、跨平台的Java串口通信库,支持Windows、Linux、Mac OS等操作系统。...
下面是一个简单的Java串口通信示例: ```java import javax.comm.*; public class SerialTest implements SerialPortEventListener { private SerialPort serialPort; public void start(String portName) { ...
综上所述,这些代码实例涵盖了串口通信的基础知识,包括但不限于:Java串口编程API的使用,数据传输的控制与错误处理,以及如何将串口通信与用户界面和外部硬件设备(如温度检测仪)相结合。学习这些内容将有助于...
Java串口通信是Java编程语言中的一种特殊通信方式,它允许程序通过串行端口与其他设备进行数据交换。在许多嵌入式系统、工业自动化、物联网(IoT)设备以及需要低速数据传输的应用场景中,串口通信非常常见。Java中的...
Java短信猫收发短信的例子是基于Java编程语言实现的一个实用工具,主要用于与短信猫设备进行交互,实现短信的发送和接收功能。短信猫是一种硬件设备,它可以连接到计算机的串行端口或USB接口,模拟手机功能,通过GSM...
但是,通过JNI(Java Native Interface)或者使用已有的库,如javax.comm(对于串口通信),可以间接实现对硬件设备的访问。这里的Java例程可能就采用了类似的方法,封装了与明华读卡器通信的底层逻辑。 3. **RFID...
在给定的代码中,使用了`javax.comm`包来进行串口编程,这个包是Java提供的一套API,用于支持与串行端口的通信。下面我们将详细解析代码的关键部分: 1. **初始化组件**: - `S_Frame` 类继承自 `JFrame`,实现了 ...
Java硬件访问包主要涉及到的是如何使用Java编程语言与硬件设备进行交互,特别是在这个特定的例子中,我们关注的是“短信猫”。短信猫是一种硬件设备,它能够通过串行接口(通常是COM端口)连接到计算机,并允许程序...
- **串口**: 使用`Connector.open("comm:device;parameters")`。 需要注意的是,并不是所有MIDP实现都会支持这些连接类型,除了`HttpConnection`。 #### 三、具体应用实例 为了更好地理解如何使用GCF进行网络编程...
在Java中,通常使用`javax.comm`库来处理串口通信。然而,Android并不直接支持此API,因此我们需要寻找替代方案。一种常见的方法是使用第三方库,如Android-SerialPort-API或USBHostSerialPort等。 3. **第三方库...
- 对于串行通信,可以使用`javax.comm`库(非标准但广泛使用)或者第三方库如RXTX。 - 对于网络通信,`java.net`包提供了Socket和ServerSocket类,可以用于TCP/IP通信。 3. **设计和实现**: - 首先,定义接口或...
Java提供了一个名为`javax.comm`的API,用于处理串口通信,但在Java 6之后,这个API不再被官方支持。现在,开发者通常使用第三方库,如RXTX或JSerialComm来替代。 RXTX是一个开源库,它为Java提供了对串行和并行...