J2ME杂谈(2)
J2ME虚拟机的移植。
在嵌入式系统中的JAVA虚拟机由多个版本,用的最广的是SUN发布的KVM。K的意思是这个虚拟机的大小是以kilo byte来衡量的(size小)。我们这里主要介绍一下KVM的移植。需要声明的是我的这些介绍只是一些原理上的,所以不会一个是step by step的移植教程。在需要的时候,我会尽可能的拿实际的代码来示范。
因为JAVA与C的运行环境在对stack,静态变量, 类和指针的管理都存在一些差别,所以在从Java调用Native的C或C++ CODE时,增加了一层KNI(K native interfatce)接口用于解决转换这些问题。即KNI是KVM在成功调用Native 的C code Method时所需要依靠的一些辅助函数。KNI的所有实现都包含在Kni.h和Kni.cpp(可从sun的官网上下载cldc的最新版本)中,作为Interface必定是双向的,主要功能包括获得由KVM向Native C传递的参数, 处理Naïve C code的返回值等等。
KNI作为一个移植过程的重要工具,大家必须非常熟悉。关于KNI API的介绍,可在google或baidu上搜索。也可以发邮件给我。
这里举一个例子:
KNIEXPORT KNI_RETURNTYPE_BOOLEAN
Java_com_sun_midp_io_j2me_cbs_CBSImpl_readMsg() {
CB_APP_MSG_S *msg = NULL;
if ((msg = getCBSMessage()) == NULL) {
KNI_ReturnBoolean(KNI_FALSE); //返回值
}
KNI_StartHandles(3); //声明native方法中将使用3个句柄
KNI_DeclareHandle(clazz); //声明句柄clazz
KNI_DeclareHandle(obj); //声明句柄obj
KNI_DeclareHandle(cb_content); //声明句柄cb_content
KNI_GetParameterAsObject(1, obj); //获得参数1并赋给obj
KNI_GetObjectClass(obj, clazz); //获得obj所属类的句柄存于clazz中
KNI_SetIntField(obj, KNI_GetFieldID(clazz, \"channel\", \"I\"), (jint)msg->channelNumber); //获得成员变量channel的指针;将msg->channelNumber赋给channel
KNI_SetByteField(obj, KNI_GetFieldID(clazz, \"encoding\", \"B\"), ENCODING_UNICODE); //获得成员变量encoding的指针;将ENCODING_UNICODE赋给encoding
KNI_SetIntField(obj, KNI_GetFieldID(clazz, \"msg_len\", \"I\"), getMsgLen(msg->cbContent));
KNI_GetObjectField(obj, KNI_GetFieldID(clazz, \"cb_content\", \"[B\"), cb_content); //获得成员数组的指针
KNI_SetRawArrayRegion(cb_content, 0, CB_MAX_MSG_SIZE, (jbyte *)msg->cbContent); //清0
midpFree(msg);
msg = NULL;
KNI_EndHandles(); //与starthandle配对使用,表示结束
KNI_ReturnBoolean(KNI_TRUE);
}
分享到:
相关推荐
在这个压缩包文件"KVM-KNI-资料"中,很可能是包含了关于J2ME的KVM和KNI的详细文档、教程、示例代码或者工具,帮助开发者深入了解这两个组件的工作原理以及如何有效地利用它们。可能包含的内容有: 1. KVM的内部结构...
在J2ME中,开发人员需要处理资源有限的环境,因此,提供中文输入功能是一个挑战,因为这需要在小型设备上实现复杂的字符编码和输入法。 本"J2ME中文输入Demo"旨在为开发者展示如何在J2ME环境中实现基本的中文输入...
本教程将深入讲解J2ME在手机程序开发中的应用,帮助开发者掌握这一核心技术。 ### J2ME技术概述 J2ME由两大部分构成:配置(Configurations)和框架(Profiles)。配置定义了运行时环境的基本特性,如内存大小和...
在**J2ME中文API**中,主要包含以下几个核心部分: 1. **CLDC(Connected Limited Device Configuration)**:这是一个轻量级的Java虚拟机,用于资源有限的设备。它定义了运行时环境和基本类库。 2. **MIDP...
J2ME中文教程 不错的学习资料,刚开始学习的可以参考下!
在深入探讨J2ME中文API(HTML)的相关知识点前,我们先来了解一下J2ME的基本概念及其在移动设备开发中的重要性。J2ME,即Java 2 Platform, Micro Edition,是Sun Microsystems(现已被Oracle收购)推出的一种适用于...
在J2ME中,RecordStore是用于存储非结构化数据的主要机制。开发者可以创建、读取、更新和删除RecordStore中的记录。此外,FileConnection API允许开发者访问设备的文件系统,进行文件的读写操作。 **游戏开发** ...
【标题】:“图片分类 J2ME中的图片处理” 【描述】:“图片的特点及分类;png图片的格式分析;图片在J2me中的应用。” 【标签】:“图片处理” “J2ME” “png” 在Java的移动开发领域,J2ME(Java 2 Micro ...
4. **MIDP API详解**:MIDP是J2ME中用于创建移动应用的核心API,教程会详细介绍如何使用Canvas、Form、Item等组件进行用户界面设计,以及怎样利用 MIDP的网络功能实现数据通信。 5. **图形与多媒体**:J2ME支持丰富...
5. **MIDlet**:J2ME中的应用程序单元,类似于Java SE中的JApplet。一个MIDlet由一个主类(实现了MIDlet接口)和可选的其他类组成。 6. **用户界面(UI)编程**:J2ME的UI通常基于 Lightweight User Interface ...
MIDP(Mobile Information Device Profile)2.0是J2ME中的一个重要配置,它提供了在这些小型设备上开发应用程序的基本框架和API。本教程将深入探讨如何使用J2ME和MIDP2.0进行移动应用开发。 **1. J2ME架构** J2ME...
第二章“CLDC 简介”介绍了MIDP 的基础Java Community Process(JCP)公布的CLDC1.0 规范(即JSR30)。有了这些知识你就可以顺利的从j2se 的基础API 过渡到MIDP 的基础API 上了。 第三章“MIDP 高级UI 的使用”介绍...
Myeclipse中的J2ME插件,使得开发者可以直接在IDE中创建、编辑、构建和运行J2ME项目,大大提高了开发效率。 在使用Myeclipse进行J2ME开发时,你可以创建新的J2ME工程,配置所需的CLDC和MIDP版本,然后添加源代码...
Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于开发在小型设备上运行的应用程序,如移动电话、智能手表、嵌入式系统等。这份"j2me 文档 开发 官方 中文"是针对J2ME开发者的重要资源,它提供了官方的...
### J2ME 开发简介 #### 一、J2ME概览 J2ME,全称为Java 2 Micro Edition,是Sun Microsystems推出的一种专为移动设备和嵌入式设备设计的Java平台。它包含了Java语言的基本特性,并针对资源受限的设备进行了优化。...
在J2ME中,数据存储通常使用Record Management System (RMS)。RMS提供了一个简单的键值对存储机制,适用于小规模的数据存储。开发者需要学会如何创建记录商店、记录和操作数据。 **J2ME的事件驱动模型** J2ME应用...
J2ME的中文教程,值得看一下!
2. **MIDP (Mobile Information Device Profile)**:MIDP是J2ME中最常见的框架,用于开发移动应用程序,包括用户界面组件和网络通信功能。 3. **CLDC (Connected Limited Device Configuration)**:这是J2ME的基础...