`
yydcj
  • 浏览: 61554 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

把JAR文件添加到MIDlet套件

阅读更多

引自http://www.cnjm.net/eclipseme/docs/advJarFiles.html

本文档说明了如何把一个外部JAR文件添加到MIDlet套件项目中。

  1. JAR文件类型
  2. 添加硬件相关JAR文件
  3. 添加应用相关JAR文件
  4. 模拟器说明

JAR文件类型

从一个J2ME项目的观点来看,有两大类可以被添加到MIDlet套件项目的JAR文件。 理解这两类JAR文件的区别是很重要的,因为它们必须被区别对待才能得到你想获得的结果。 这两类是:

  • 硬件相关JAR文件
    这类JAR文件向MIDlet提供与一些硬件功能交互的支持,它们是安装MIDlet的目标手机或其它移动设备硬件的一部分。 这类文件的一个例子是Bluetooth™(蓝牙)接口类。

    这类JAR文件是由设备制造商提供的,通常作为无线工具包的一部分或其扩展包(add-on)的形式提供。 这类JAR文件单独存在的意义在于,使J2ME开发者可以使用它们对MIDlet进行正确的编译, 且在部署后正确引用它们。你不需要把这些硬件相关JAR中的class安装到移动设备中去—— 因为它们已经在那里了。

  • 应用相关JAR文件
    这类JAR文件包含由你或者其他J2ME开发者编写的、将直接作为MIDlet的一部分而被打包部署到移动设备的类文件。 例如,一个你用来处理与服务器之间交换数据的XML解析库。

    这类JAR文件一般是从设备制造商之外的地方获取的。当然,如果你把你的代码打包成了JAR,那它也属于这类。

对它们进行区别的原因在于,EclipseME要对它们中的class文件进行不同的处理。 对于硬件相关JAR文件,EclipseME要保证这些文件中的类在构建过程中是类路径(classpath)的一部分, 这样你的MIDlet才能正确编译,但这些类绝不能 被打包到你的MIDlet部署包中去。 因为这样做相当于试图覆盖移动设备中的硬件实现类的功能。这或许根本无法工作,因为首先,这种类文件很多都 包含本地代码(native code),而不能在MIDlet运行环境的“沙盒(sandbox)”中工作。 其次,一个包含本地代码的MIDlet在部署流程中应该是无法通过预校验的。最后,即使上面的情况都没有发生, 只要是自律的MIDlet容器都不会允许MIDlet覆盖系统类——它会认为MIDlet是无效的而拒绝执行。

另一方面,对于应用相关JAR文件,EclipseME则需要抽取其中的所有类和资源文件等,把它们和 MIDlet套件项目中的相应项目一起,打包到最后的部署包中。J2ME设备中并不存在J2SE和J2EE系统中的 类路径(classpath)概念。一个J2ME套件只是由两个文件组成——一个JAR文件和一个JAD文件。 因此所有你的MIDlet要用到的类和资源都必须被打包成一个单独的JAR文件。

EclipseME根据你把文件加入系统的方式以及(隐含的)jar文件的相关“导出(export)”设定来区分其分类归属。 因此下面的工作对你很重要:

  1. 决定JAR文件的归属分类,然后
  2. 用正确的方式把它加入系统。

添加硬件相关JAR文件

有两种添加硬件相关JAR的方法。可以在设备管理首选项面板中添加,也可以直接添加到项目,但不进行导出。

 

是用设备定义来添加硬件相关JAR文件

硬件相关JAR文件可以从设备管理 首选项中作为一个新库来添加。 大部分情况下,EclipseME能够从你的无线工具包中获取所有库定义的相关信息。 如果没有的话,那么你需要首先向设备定义中添加一个新库(具体做法请参见这里 )。 最后,修改你的MIDlet套件项目的属性来使用新添加的或更新过的设备定义(参见这里 )。

以上步骤结束之后,JAR文件就包含到你的项目的构建路径中了,这样编译器可以找到相关类的定义, 但EclipseME不会试图把这些类添加到你的部署JAR文件中去—— 因为EclipseME知道:这个JAR文件现在是无线工具包的一部分,仅用于类引用的目的。

如果你试图在模拟器运行MIDlet的时候,特别是在OTA模式中,你得到了非法类(illegal classes) 的错误提示,这可能是一个信号:你把硬件相关JAR错误的按照应用相关JAR的方式加入了系统。

直接添加到项目

在EclipseME 0.9.4版本之前,上面的方法是添加硬件相关JAR到EclipseME的唯一方案。 从0.9.4版本开始,硬件相关JAR文件还可以直接在项目属性的“Java构建路径”中的“库”面板中直接添加。 比如,在下面的项目中,mmapi.jar 已经被添加到了项目中。

但是,如果你按此方法添加JAR文件,需要你高度注意的是:在“排序和导出(Order and Export”面板中, 千万不要 选中该JAR文件旁边的复选框,就像下面这样:

如果选中了复选框,那么EclipseME会试图对mmapi.jar 中的内容进行 预校验并把其内容包含在输出的部署JAR文件中,这显然是错误的。

哪个方法更好?

在EclipseME 0.9.4之前,你只有一种方法添加硬件相关JAR,所以事情很简单。从0.9.4版本开始, 你有了两个选择,那么哪个更好些呢?

EclipseME的开发者认为,在绝大部分情况下,最好使用第一种方案——使用设备定义来添加硬件相关JAR文件。 这个方法使得这个改变在不同项目中获得重用, 而且更好的把硬件相关JAR文件和你的项目所使用的硬件设备相联系。 但如果因为某些原因你无法使用这个方法,那么第二种方法——添加不进行导出的JAR文件到项目——你也可以选用。

添加应用相关JAR文件

应用相关JAR文件必须 像非J2ME项目中的JAR文件那样, 被加入到项目的构建路径中。选择项目 菜单中的 属性(Properties) 菜单项,点击左边面板的 Java构建路径(Java Build Path) 项,然后在对话框的右边面板 中加入JAR文件(或类文件目录)。

就像这样,在上面的例子中,除了已经加入的硬件相关JAR文件mmapi.jar 之外, 我们正在为项目加入一个应用相关JAR文件extensions.jar

从EclipseME 0.9.4版本开始,你必须 在Java构建路径中的 “排序和导出”面板中,选中所有的应用相关JAR文件旁边的复选框,像下面这样:

完成之后,JAR文件或类文件目录中的class文件就成为你的项目构建路径的一部分, 而且会被打包到项目的输出部署JAR文件中。 就像上面的例子中,EclipseME 收集extensions.jar 中的所有类和其它资源,进行预校验,然后把它们作为你的MIDlet的一部分进行打包部署。 但是,EclipseME不会 如此处理mmapi.jar , 因为在“排序和导出”中,它旁边的复选框是空的。mmapi.jar 中的资源 在编译时是可用的,但不会被打包部署。

如果你试图在模拟器运行MIDlet的时候,特别是在OTA模式中, 你得到了ClassNotFoundException(未找到类) 异常, 这是个信号,表示相关的类未被正确打包到你的部署JAR文件中。 通常这意味着你没有正确的把应用相关JAR文件添加到项目的Java构建路径中, 或者是忘记选中“导出”复选框了。

模拟器说明

如果你正在使用一些特殊特性,比如蓝牙、视频等,你可能会处于这样一种境地: 你按照上面的方法正确的添加了硬件相关JAR,你的应用程序也可以正确的编译, 但是在模拟器中运行的时候,硬件功能却似乎并不工作。

这种情况下唯一的可能性就是,这并非EclipseME的问题——而很可能是J2ME模拟器的问题。 在很多情况下,无线工具包的模拟器对硬件特性的支持仅限于正确载入MIDlet, 而不包含对物理设备硬件特性的真实模拟。不幸的是,对这种情况我们也无能为力。

分享到:
评论

相关推荐

    MANIFEST文件配置

    2. **可选属性**:除了必需属性之外,开发者还可以添加其他属性来提供更多关于 JAR 文件的信息。 #### 三、必需属性 **对于 MIDlet Suite 的 JAR 文件**,MANIFEST 文件必须包含以下属性: - **MIDlet-Name**:...

    java软件,jar格式的

    MIDlet由一个或多个类组成,其中包含主类,这个主类继承自 javax.microedition.midlet.MIDlet 类,并且是MIDlet套件的核心。 7. **电子书应用的特点**: - 由于Java ME的限制,手机java电子书应用可能具有简洁的...

    java程序运行.pdf

    JAD(Java Application Descriptor)文件包含了MIDlet套件的描述信息,通常用于Java ME(移动版Java)应用程序。文件中提到的"MIDlet-Description"、"Media-price"和"MIDlet-Install-Notify"等属性,这些信息可用于...

    jad文件

    4. **MIDlet-1**: 用于定义MIDlet套件中的一个或多个MIDlet,包括启动MIDlet的名称、图标和可选的命令。 5. **JAD-URL**: 指定jad文件的获取地址,用户设备可以从中下载MIDlet的代码和资源。 6. **MIDlet-...

    EclipseME

    - **JAR文件添加到MIDlet套件**:可以在MIDlet套件中包含额外的JAR文件。 - **文档和源代码管理**:可以为WTK库添加文档和源代码。 #### 九、总结 EclipseME极大地简化了J2ME开发过程,使得开发者能够更加专注于...

    第二章 J2ME的开发流程.ppt

    - **MIDlet套件**:一组相互关联的MIDlet组成的集合,被打包成JAR文件,并配有一个外部的JAD文件,共同构成了一个MIDlet Suite。 - **JAR文件内容**:包含MIDlet类、其他辅助类、资源文件(如图像、音频)以及清单...

    J2ME认证题库

    【J2ME认证题库】相关的知识点主要涵盖了Java Micro Edition(J2ME)的编程、线程管理、图形处理、虚拟机类型、事件处理、配置和简表、MIDlet套件、JAR文件和清单文件、记录仓库、JAD描述文件以及J2ME体系结构等多个...

    J2ME权威认证--微软提供-倾情奉献

    8. **MIDlet套件**:MIDlet套件包含JAR文件中的Java类文件和描述JAR内容的清单文件,CVM虚拟机和JAM(应用程序管理器)是MIDP(Mobile Information Device Profile)的一部分,不是MIDlet套件的组成部分,C、D选项...

    j2me电话簿案例源码

    JAD文件是一个文本文件,包含有关Midlet套件的元数据,如版本信息、作者、大小、描述以及主Midlet的名称。要将启动Midlet更改为“midlet6”,需要找到JAD文件,然后修改`MIDlet-N`属性,确保`MIDlet-1`或`MIDlet-...

    J2ME知识点汇集,J2ME考试专用

    9. **MIDlet套件**:MIDlet套件由JAR文件中的Java类、清单文件组成,描述了MIDlet应用的内容。CVM虚拟机和JAM(应用程序管理器)是MIDP环境的组成部分,而非MIDlet套件的直接部分。 10. **JAR文件清单**:MIDlet-...

    J2ME考试试题集

    - **MIDlet套件**:一个完整的MIDlet套件包括附在JAR文件中的Java类文件以及描述JAR文件内容的清单文件。CVM虚拟机和JAM(应用程序管理器)不是MIDlet套件的组成部分。 ### 9. JAR文件清单属性 - **清单文件属性**...

    j2me考点,指导您如何复习J2ME考试,帮助你更好地通过考试

    MIDlet套件是J2ME应用的基本单位,由Java类文件、清单文件、图像和数据文件以及JAD文件组成。JAR文件中包含所有代码和资源,而JAD文件则提供元数据,如应用版本、屏幕大小要求等。MIDlet是运行在移动设备上的Java...

    用Ant实现Java项目的自动构建和部署

    然后,使用`midlet`任务将JAR文件打包为MIDlet套件,准备部署。 实例二:J2EE项目构建 在更复杂的配置中,需要定义多个目标,如`compile`、`war`、`deploy`等。使用`<property>`元素定义服务器的URL和认证信息。在`...

    android笔试题目汇总及答案

    - MIDlet套件包括Java类文件、清单文件,但不包括CVM虚拟机,那是运行环境的一部分。 10. **JAR文件清单**: - 必须的属性包括MIDlet-Name、MIDlet-Version和MIDlet-Vendor,而MIDlet-Info-URL不是必须的。 11. ...

    niit_J2me题库.doc

    MIDlet套件是应用程序发布的单位,通常包含在一个JAR文件中,同时需要一个JAD文件来描述应用的元数据,如MIDlet名称、版本、供应商信息以及配置和配置文件等。MIDlet Suite的启动基本单位是MIDlet。 【J2ME文件结构...

    J2ME MIDP无线设备编程指南

    5. **MIDlet套件管理**:MIDlets(MIDP应用程序)是打包在JAR文件中的,可以通过JAD文件进行分发和安装,JAD文件包含了MIDlet的元数据。 6. **生命周期管理**:MIDlets有特定的生命周期,包括启动、暂停、恢复和...

    J2ME编译文档

    1. **javax.microedition.midlet**: MIDlet套件,定义了J2ME应用程序的基本框架,包括MIDlet类,它是所有J2ME应用的基类。 2. **javax.microedition.lcdui**: 用户界面(UI)套件,提供了基本的图形用户界面组件,...

    非常不错的适于初学者的J2ME讲义

    #### 五、MIDlet套件的描述文件(JAD文件) 为了使MIDlet能在移动设备上运行,需要创建一个JAD文件来描述MIDlet的信息,例如: ``` MIDlet-1: hello,,hello MIDlet-Jar-Size: 915 MIDlet-Jar-URL: firstj2me.jar ...

    j2me入门教程j2me入门教程j2me入门教程

    一个MIDlet套件包括MIDlet类、清单文件(MIDlet-Jar-URL、MIDlet-Version等元数据)和可能的资源文件。 五、MIDP API MIDP API提供了用户界面组件(如Canvas和Form)、网络访问(HttpConnection)和数据存储...

Global site tag (gtag.js) - Google Analytics