- 浏览: 205379 次
- 性别:
- 来自: 河源
-
文章分类
- 全部博客 (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 1789从前面的分析 中,我 ... -
J2ME字符串split方法
2010-04-27 20:07 1423/** * Split string into mu ... -
自己收集JavaME的相关资料
2010-04-15 02:05 10431、《WTK进阶使用教程》网址:http:// ... -
JavaME 到底可以干些什么
2010-04-10 22:11 1372最近在做一个JavaME的项目,发现JavaME也不 ... -
Simple Bluetooth Communication in J2ME
2010-01-07 10:00 2459最简单的蓝牙操作步骤,一步一步教你如何操作,它的流程很 ... -
BlueTooth探索系列(一)---JSR082 API框架剪影
2009-12-16 20:25 1732可以自由转载, 转载请保留下面的作者信息:作者 cleverp ... -
JSR82 API 介绍
2009-12-08 23:24 1934蓝牙是一种低成本、� ... -
j2ME多线程网络编程
2009-12-08 22:07 2034网络编程中的多� ... -
在Java ME中通过蓝牙发现设备并传送文件
2009-12-08 22:00 1340在Java ME设备上� ... -
使用 JSR-82 API 实现 OBEX 图像传输
2009-12-08 21:35 1936蓝牙协议 ... -
蓝牙应用
2009-12-08 21:11 1150网易科技讯 4月13� ... -
基于JSR82的蓝牙应用开发手记
2009-12-08 21:08 2201目目标:基于JSR82的蓝牙应用,实现手机和PC之 ... -
CLDC API简要介绍
2009-12-06 09:16 746* 介绍 � ... -
j2me框架大全
2009-12-05 01:06 4882J2ME 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技术:用于电路设计和实现,如函数信号发生器、计程车...
本章节《Java手机程序设计入门13》聚焦于Java 2 Micro Edition (J2ME) 中的Mobile Information Device Profile (MIDP) 网络编程技术。对于初学者来说,该章节是理解如何在移动设备上实现网络通信的基础。 #### 二、...
1、支持标准j2me库的通讯模块 2、业务代码通过java语言编写,可以通过串口&后台云方便部署 3、充分挖掘数据模块的潜在能力,节省外部主控mcu硬件成本; 4、sdk集成到eclipse平台,开发环境无缝切换。
其中,JSR082是一种广泛应用的蓝牙接口标准,源自J2ME(Java 2 Micro Edition)。 JSR082规范主要包括以下内容: 1. **仅数据传输**:专注于数据传输功能。 2. **通讯协议**: - L2CAP(逻辑链路控制和适配协议)...
工业控制系统中应用J2ME技术,能够实现嵌入式环境下的服务级交互,简化网络编程,增强系统的安全特性。通过使用J2ME,无线数传终端得以模块化和构件化设计,增强了系统的可扩展性和可升级性。此外,JAVA嵌入式软件...
3. FPGA设计:FPGA(现场可编程门阵列)用于实现数字信号处理算法,如数字成型滤波器、高速串口、SPWM控制器等,能够提供高效的硬件解决方案,降低系统延迟并提高处理速度。 4. 单片机应用:单片机常用于控制系统...
本文详细介绍了一种基于个人数字助理(PDA)的GSM远端监控PLC(可编程逻辑控制器)控制系统。该系统可以应用在自动售货机、智能家居等行业领域。系统的核心组成包括STM32W处理器模块、电源模块和传感器模块。STM32W...