- 浏览: 204261 次
- 性别:
- 来自: 河源
文章分类
- 全部博客 (102)
- Hibernate IBatis (0)
- Spring (0)
- Struts2.x Struts1.x (0)
- Oracle (3)
- sql server (2)
- JavaME (15)
- MySql (0)
- Android (9)
- lwuit (10)
- .net (9)
- Ajax (3)
- UML (0)
- JavaSE——java基础 (4)
- Java web (3)
- 设计模式 (2)
- JSF (0)
- 服务器之:Tomcat (1)
- 计算机网络 (14)
- 操作系统 (5)
- 工具类 (7)
- Linux (0)
- 其他 (3)
- 经验总结 (3)
- 搜索引擎 (1)
- html (1)
- python (1)
- c (2)
- perl (1)
- Lisp (1)
最新评论
-
十口文:
谢谢你的分享!!
操作系统 教程 -
liu_shui8:
请问这是什么考试的试题?
谢谢!!!
操作系统试题及参考答案 -
JAVA言诚eye218:
这个在8.6中已经不能用了
myeclipse8.6正式版下载地址+注册码 -
liky1234567:
虽然是英语,还是耐心看完了
Simple Bluetooth Communication in J2ME -
xiao_feng68:
有个疑问想问博主:问什么直接使用组件事件得到的media是都是 ...
zk fileupload
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数据流对象,控制缓冲区大小,调整输入的处理。
评论
发表评论
-
深入分析JAD和 MANIFEST.MF文件
2010-04-28 01:43 1780从前面的分析 中,我 ... -
J2ME字符串split方法
2010-04-27 20:07 1414/** * Split string into mu ... -
自己收集JavaME的相关资料
2010-04-15 02:05 10391、《WTK进阶使用教程》网址:http:// ... -
JavaME 到底可以干些什么
2010-04-10 22:11 1359最近在做一个JavaME的项目,发现JavaME也不 ... -
Simple Bluetooth Communication in J2ME
2010-01-07 10:00 2447最简单的蓝牙操作步骤,一步一步教你如何操作,它的流程很 ... -
BlueTooth探索系列(一)---JSR082 API框架剪影
2009-12-16 20:25 1713可以自由转载, 转载请保留下面的作者信息:作者 cleverp ... -
JSR82 API 介绍
2009-12-08 23:24 1919蓝牙是一种低成本、 ... -
j2ME多线程网络编程
2009-12-08 22:07 2028网络编程中的多 ... -
在Java ME中通过蓝牙发现设备并传送文件
2009-12-08 22:00 1329在Java ME设备上 ... -
使用 JSR-82 API 实现 OBEX 图像传输
2009-12-08 21:35 1917蓝牙协议 ... -
蓝牙应用
2009-12-08 21:11 1138网易科技讯 4月13 ... -
基于JSR82的蓝牙应用开发手记
2009-12-08 21:08 2191目目标:基于JSR82的蓝牙应用,实现手机和PC之 ... -
CLDC API简要介绍
2009-12-06 09:16 735* 介绍 ... -
j2me框架大全
2009-12-05 01:06 4869J2ME Polish J2ME Po ...
相关推荐
J2ME网络编程是软件开发领域中的一个重要分支,特别是在移动应用开发中,如J2ME版的UCWEB、QQ和飞信等。本文将深入探讨J2ME的网络编程,特别是通用连接框架(Generic Connection Framework,GCF)的基础知识,以及在...
【标题】"see-postfiy.zip_disease7do_串口编程" 提示我们这是一个与游戏开发相关的项目,其中可能涉及到串口通信技术。在游戏开发中,串口编程通常是用于设备之间的通信,例如游戏控制器或者外部硬件设备的连接。 ...
J2ME的CommAPI提供了串口和蓝牙通信的能力,而WMA(Wireless Messaging API)和WSP(Wireless Session Protocol)则用于实现无线数据交换,如HTTP和WAP协议的访问。 八、多媒体与游戏开发 J2ME支持多媒体功能,如...
7. **网络编程**:J2ME的JSR-82(Java API for Bluetooth)和JSR-118(Java.comm API)提供了蓝牙和串口通信的支持。此外,MIDP的Connection API用于HTTP、WAP和其他协议的网络访问。 8. **数据存储**:MIDP提供...
这份实训报告详细记录了学习者在J2ME平台上进行实践操作的过程,涵盖了四个单元的学习内容,旨在帮助学生巩固课堂所学的理论知识,并通过实际编程提升技能。 **单元一:JavaME基础** 在JavaME实训的第一单元,主要...
本资料包“j2me新手学习全套示例源代码”是专为初学者设计的一系列实践教程,旨在帮助初学者快速掌握J2ME编程的基本技能和概念。 J2ME的架构由Profile、Configuration和Package三部分组成。Profile定义了特定设备的...
《蓝牙串口助手:J2ME技术在移动通信中的应用》 蓝牙串口助手是一款基于Java Micro Edition(J2ME)技术开发的应用程序,主要用于在移动设备之间建立蓝牙连接,实现串行通信功能。该软件的开发源代码是学习和理解...
《Nokia S60平台J2ME蓝牙编程详解》 在移动设备的开发领域,Nokia S60平台因其广泛的应用和丰富的功能而备受青睐。其中,蓝牙技术作为无线通信的重要部分,允许设备之间进行数据交换,对于开发具有互动性的应用至关...
【标题】"清華大學出版社Java程序與設計源程序" 提供了丰富的Java学习资源,主要涵盖J2EE和...通过学习和分析这些代码,读者可以提升Java编程技能,理解J2EE和J2ME平台的应用场景,并掌握实际项目开发的流程和技巧。
JSR-82是Java Community Process发布的一个标准,它定义了Java语言中的蓝牙API,使得开发者能够利用这些接口在支持蓝牙的设备上进行编程。JSR-82包括了蓝牙设备的发现、连接、数据传输以及服务搜索等功能。 4. **...
这需要理解串口协议、TCP/IP协议栈以及网络编程。 2. **嵌入式 RS232 与以太网接口模块的设计与应用** 这个设计包括了嵌入式系统的硬件设计(如微控制器、接口芯片)和软件设计(如驱动程序、协议栈)。学生需要...
3. FPGA应用:FPGA(现场可编程门阵列)在数字信号处理中的应用,例如数字滤波器设计、高速串口、信号发生器等,体现了硬件级别的高速并行处理能力。 4. EDA技术:用于电路设计和实现,如函数信号发生器、计程车...
7.1.3 串口编程应用实例168 实验7.1 串口通信实验170 7.2 嵌入式Linux网络编程171 7.2.1 网络通信171 7.2.2 Socket简介172 7.2.3 网络编程172 实验7.2 Socket相关程序设计174 7.3 嵌入式蓝牙技术176 ...
1、支持标准j2me库的通讯模块 2、业务代码通过java语言编写,可以通过串口&后台云方便部署 3、充分挖掘数据模块的潜在能力,节省外部主控mcu硬件成本; 4、sdk集成到eclipse平台,开发环境无缝切换。
7.1.3 串口编程应用实例168 实验7.1 串口通信实验170 7.2 嵌入式Linux网络编程171 7.2.1 网络通信171 7.2.2 Socket简介172 7.2.3 网络编程172 实验7.2 Socket相关程序设计174 7.3 嵌入式蓝牙技术176 7.3.1 ...
7.1.3 串口编程应用实例168 实验7.1 串口通信实验170 7.2 嵌入式Linux网络编程171 7.2.1 网络通信171 7.2.2 Socket简介172 7.2.3 网络编程172 实验7.2 Socket相关程序设计174 7.3 嵌入式蓝牙技术176 7.3.1 ...
7.1.3 串口编程应用实例168 实验7.1 串口通信实验170 7.2 嵌入式Linux网络编程171 7.2.1 网络通信171 7.2.2 Socket简介172 7.2.3 网络编程172 实验7.2 Socket相关程序设计174 7.3 嵌入式蓝牙技术176 7.3.1 ...
其中,JSR082是一种广泛应用的蓝牙接口标准,源自J2ME(Java 2 Micro Edition)。 JSR082规范主要包括以下内容: 1. **仅数据传输**:专注于数据传输功能。 2. **通讯协议**: - L2CAP(逻辑链路控制和适配协议)...
本章节《Java手机程序设计入门13》聚焦于Java 2 Micro Edition (J2ME) 中的Mobile Information Device Profile (MIDP) 网络编程技术。对于初学者来说,该章节是理解如何在移动设备上实现网络通信的基础。 #### 二、...
工业控制系统中应用J2ME技术,能够实现嵌入式环境下的服务级交互,简化网络编程,增强系统的安全特性。通过使用J2ME,无线数传终端得以模块化和构件化设计,增强了系统的可扩展性和可升级性。此外,JAVA嵌入式软件...