详细说明MIDP中的属性问题

J2ME MIDP 2.0 无线设备编程的一些源码JAVA源码 J2ME MIDP 2.0 无线设备编程的一些源码JAVA源码 J2ME MIDP 2.0 无线设备编程的一些源码,像是一本书中的实例,都比较简单,基础性东西,新手可能会喜欢,附有少量游戏代码,截图上有具体的内容。 J2ME MIDP 2.0 无线设备编程的一些源码 (3 folders, 2 files, 1.38 KB, 639.35 KB in total.)          apps (8 folders, 2 files, 1.38 KB, 620.90 KB in total.)             Chap4 (7 folders, 2 files, 1.38 KB, 27.33 KB in total.)                bin (0 folders, 6 files, 8.00 KB, 8.00 KB in total.)       Chap4.html 131 bytes       Chap4.jad 282 bytes       Chap4.jar 5.98 KB              MANIFEST.MF 234 bytes             classes (0 folders, 2 files, 1.38 KB, 1.38 KB in total.)                    lib (0 folders, 2 files, 1.38 KB, 1.38 KB in total.)                    res (0 folders, 2 files, 1.38 KB, 1.38 KB in total.)                    src (0 folders, 5 files, 11.02 KB, 11.02 KB in total.)       CmdDemo.java 2.92 KB       CmdDemo2.java 5.01 KB       HelloWorld.java 1.70 KB                    tmpclasses (0 folders, 2 files, 1.38 KB, 1.38 KB in total.)                   tmplib (0 folders, 2 files, 1.38 KB, 1.38 KB in total.)                     Chap5 (7 folders, 2 files, 1.38 KB, 58.02 KB in total.)                bin (0 folders, 8 files, 18.75 KB, 18.75 KB in total.)       Chap5.html 131 bytes       Chap5.jad 348 bytes       Chap5.jar 15.53 KB       e2p5068.ini 1.03 KB       java.log 51 bytes              MANIFEST.MF 299 bytes             classes (0 folders, 2 files, 1.38 KB, 1.38 KB in total.)                    lib (0 folders, 2 files, 1.38 KB, 1.38 KB in total.)                    res (1 folders, 2 files, 1.38 KB, 7.05 KB in total.)                  pic (0 folders, 4 files, 5.67 KB, 5.67 KB in total.)         logo.png 0.99 KB                  wyy_logo.png 3.30 KB               src (0 folders, 6 files, 25.29 KB, 25.29 KB in total.)       animateMID.java 4.86 KB       Chap5GraMID.java 14.09 KB       fullScreenMID.java 2.01 KB       keyHandleMID.java 2.94 KB                    tmpclasses (0 folders, 2 files, 1.38 KB, 1.38 KB in total.)                   tmplib (0 folders, 2 files, 1.38 KB, 1.38 KB in total.)                     Chap6 (7 folders, 2 files, 1.38 KB, 153.39 KB in total.)                bin (0 folders, 11 files, 62.12 KB, 62.12 KB in total.)       Chap6.jad 823 bytes       Chap6.jar 49.48 KB       e2p5068.ini 1.03 KB       e2p5078.ini 796 bytes       e2p5083.ini 3.20 KB       e2p5138.ini 4.26 KB       e2prom.ini 429 bytes       java.log 0 bytes              MANIFEST.MF 774 bytes 立即下载

      本文目的是说明MIDP中的属性问题,主要涉及到jad和MANIFEST.MF文件的一些概念。事实上很多人并不清楚这方面的细节。所以你应该仔细读读这篇文章.

      通常MIDP的应用程序是以.jar文件和.jad文件发布的。jar文件就是我们所说的jar包,jad文件的全名是java application descriptor。在jad文件中包含着Application Management Software用来管理MIDlets的生命周期的信息,当然也包括很多重要的属性。他们是成对出现的例如:MIDlet-Name:myjava。你可以通过调用getAppProperty("MIDlet-Name")来得到String类型的myjava,这是非常方便的,如果你想让你的MIDlet去联网那么你可以定义一个name为SERVER_URL,把它的值定义为http://yourip:port/myservlet,这样如果你想去连接其他地址的话只需要修改jad文件了,不需要重新编译。因此我们要清楚一点在jad文件里面放置一些MIDlet初始化需要的值是比较可取的。

      在jar包里面包括一个目录META-INFO里面有个文件是MANIFEST.MF。它是用来描述JAR文件的,也包含一些其它的信息,你可能发现了,在MANIFEST.MF和JAD文件中的一些值是相同的。那么这就存在着一个规则,AMS如何决定去读取哪个值呢?答案是这样的。

  1. 如果MIDlets的jar包是signed的,那么AMS要去察看它的数字签名,如果是有效的那么它会首先去读取MANIFEST.MF的内容,然后读取jad文件中相同的内容,如果匹配的话那么它会安装这个jar包,如果不匹配的话就会拒绝安装。如果他发现数字签名无效的话直接就会拒绝安装。
  2. 如果MDIlets的jar包是unsigned的话,那么AMS就把它认为是非信任的,他去读取jad文件的属性,如果发现没有的话它去读取MANIFEST的内容,也就是说如果jad和MANIFEST里面都有的属性AMS只会去读取jad中的。

      下面这个逻辑看上去是比较清楚的:
 given : String key // attribute name
 return : String value
 throws : NullPointerException if key is null

 if trusted
  String v0 = lookup key in manifest
  String v1 = lookup key in descriptor

  if ( v0 != null && v1 != null )
   // found in both; must be the same value
   assert( v0.compareTo( v1 ) == 0 );

  value = ( v1 != null )? v1 : v0;
 else // untrusted
  value = lookup key in descriptor

  if value == null
   value = lookup key in manifest

 return value

下面简单介绍一下MIDP2.0中定义的一些重要的参数,在MIDP2.0中定义了18个值。其中在MANIFEST.MF和jad中都必须定义的有六个,他们是:
MIDlet-Name
MIDlet-Version
MIDlet-Vendor
MicroEdition-Profile
MicroEdition-Configuration 
MIDlet-n 
由于一个MIDlet suite里面可以有多个MIDlet的,因此你要说明他们比如MIDlet-1,MIDlet-2.....MIDlet-n,这一点非常的重要,在部署jar和jad文件到手机的时候一定要确保MIDlet-Name的正确,它的值是你的jar包的名字!否则不会安装成功的。还有两个值是MANIFEST文件中不许有的他们是MIDlet-Jar-URL ,MIDlet-Jar-Size 其中应该注意的是MIDlet-Jar-URL,如果你要是通过OTA下载的话,那么你不许让他指向你jar包的绝对地址,例如http://myip:port/app/myapp.jar。

      关于一个MIDlet suite里面有多个MIDlet的情况我写了个简单的代码测试了一下,如果还有疑问的话你可以运行一下下面的程序:
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
/*
 * Created on 2004-7-14
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author E2412C
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class MIDlet1 extends MIDlet
{

    private Display display;
   
    /* (non-Javadoc)
     * @see javax.microedition.midlet.MIDlet#startApp()
     */
    protected void startApp() throws MIDletStateChangeException
    {
        // TODO Auto-generated method stub
        display = Display.getDisplay(this);
        display.setCurrent(new Form("1"));
    }

    /* (non-Javadoc)
     * @see javax.microedition.midlet.MIDlet#pauseApp()
     */
    protected void pauseApp()
    {
        // TODO Auto-generated method stub

    }

    /* (non-Javadoc)
     * @see javax.microedition.midlet.MIDlet#destroyApp(boolean)
     */
    protected void destroyApp(boolean arg0) throws MIDletStateChangeException
    {
        // TODO Auto-generated method stub

    }

}
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
/*
 * Created on 2004-7-14
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author E2412C
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class MIDlet2 extends MIDlet
{

    private Display display;
   
    /* (non-Javadoc)
     * @see javax.microedition.midlet.MIDlet#startApp()
     */
    protected void startApp() throws MIDletStateChangeException
    {
        // TODO Auto-generated method stub
        display = Display.getDisplay(this);
        display.setCurrent(new Form("2"));
    }

    /* (non-Javadoc)
     * @see javax.microedition.midlet.MIDlet#pauseApp()
     */
    protected void pauseApp()
    {
        // TODO Auto-generated method stub

    }

    /* (non-Javadoc)
     * @see javax.microedition.midlet.MIDlet#destroyApp(boolean)
     */
    protected void destroyApp(boolean arg0) throws MIDletStateChangeException
    {
        // TODO Auto-generated method stub

    }

}
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
/*
 * Created on 2004-7-14
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author E2412C
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class MIDlet3 extends MIDlet
{

    private Display display;
   
    /* (non-Javadoc)
     * @see javax.microedition.midlet.MIDlet#startApp()
     */
    protected void startApp() throws MIDletStateChangeException
    {
        // TODO Auto-generated method stub
        display = Display.getDisplay(this);
        display.setCurrent(new Form("3"));
    }

    /* (non-Javadoc)
     * @see javax.microedition.midlet.MIDlet#pauseApp()
     */
    protected void pauseApp()
    {
        // TODO Auto-generated method stub

    }

    /* (non-Javadoc)
     * @see javax.microedition.midlet.MIDlet#destroyApp(boolean)
     */
    protected void destroyApp(boolean arg0) throws MIDletStateChangeException
    {
        // TODO Auto-generated method stub

    }

}
JAD文件的内容如下:
MIDlet-3: MIDlet3,,MIDlet3
MIDlet-2: MIDlet1,,MIDlet1
MIDlet-1: MIDlet2,,MIDlet2
MIDlet-Jar-URL: MIDlets.jar
MicroEdition-Configuration: CLDC-1.0
MIDlet-Version: 1.0.0
MIDlet-Name: MIDlets
MIDlet-Vendor: Midlet Suite Vendor
MicroEdition-Profile: MIDP-1.0
把上面的三个.java文件打包成MIDlets.jar文件,然后双击.jad文件。程序就可以运行起来了,我在wtk2.1下运行没有任何问题!
 

 

midp2.0:WTK源代码 由于找的人很多,现在发给大家midp2.0 WTK的源代码 立即下载

相关推荐

j2me的midp2.0所有源代码

此代码,使得j2me的爱好者,初学者更清晰,更明白的了解javaME,了解sun公司人员的编程思路及其思想

Jar 包游戏改名以及"JAR文件无效"的解决办法

Jar 包游戏改名以及"JAR文件无效"的解决办法

蜡笔小辛的专栏 3949

J2ME源码midp2.0

不多说了,想要的都知道.

关于J2ME运行时报MUST contain the attribute: MIDlet-1

 今天刚做了第一个入门的J2ME的遇到很多问题,最棘手的就是 生成好jad后(在你的项目上点击右键,---》 J2ME -->CREATE PACKAGE ,jad生成路径在项目下面 deployed文件夹),一运行就提示 J2ME运行时报MUST contain the attribute: MIDlet-1 网上找了半天,终于找到原因了, 很明显,上面所报的错误是说jad文件没有包含M

forrest23的专栏 1388

基于STM32环境温湿度监测系统设计

基于STM32环境温湿度监测系统设计1. 实验目的2. 任务和要求3. proteus仿真图4. 实验代码 1. 实验目的 (1) 掌握使用 KEIL MDK5 进行软件开发的具体流程; (2) 掌握硬件电路的设计方法; (3) 掌握 STM32 微控制器的程序设计及代码编写方法。 2. 任务和要求 (1)在 STM32F103 平台下,通过温度传感器 DS18B20 和湿度传感器 DHT11 实现环境温湿度信息的采集; (2)将温度传感器和湿度传感器所采集的数据在 LCD 液晶屏幕上显示出来,超

唯一的博客 2万+

英飞凌IGBT驱动芯片2ED020I12F2去饱和电路设计总结整理收集

记录下英飞凌IGBT驱动芯片限流电阻阻值设计

nizhenyuchina的博客 5996

介绍MIDP的属性问题

作者:mingjava   文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=26本文目的是说明MIDP中的属性问题,主要涉及到jad和MANIFEST.MF文件的一些概念。事实上很多人并不清楚这方面的细节。所以你应该仔细读读这篇文章.     通常MIDP的应用程序是以.jar文件和.jad文件发布的。jar文件就是我们所

mobilechannel的专栏 746

Docker部署OnlyOffice踩坑实录:解决editor.bin下载失败的3种姿势

本文详细解析了Docker部署OnlyOffice时editor.bin下载失败的常见原因,并提供了三种核心解决方案。重点剖析了容器网络配置、Nginx反向代理(特别是proxy_pass设置)以及安全策略调整,帮助开发者彻底解决静态资源加载问题,确保文档协作平台稳定运行。

weixin_29281941的博客 873

介绍MIDP应用程序的属性

MIDlet是在MIDP中提出的一种应用程序模型,目前在J2ME中应用最为广泛。本文将主要介绍MIDP应用程序的属性问题。读者可以参考MIDP Application Properties    MIDlet可以访问两种运行时的属性值:系统和应用程序的。    系统属性的概念是在CLDC(Connected Limited Device Configuration)中定义的,属性值被写入底层的系统

mingjava的专栏 3624

告别双系统!用PhyFusion在麒麟V10上无缝融合Win11,文件互传、GPU加速全搞定

本文详细介绍了在飞腾D3000平台上使用PhyFusion实现麒麟V10与Win11无缝融合的解决方案。通过视觉无界、数据互通和性能无损的三大突破,PhyFusion显著提升了跨系统工作效率,支持GPU加速和文件互传,是国产化平台的革命性工具。

weixin_28707365的博客 1020

从原理图到GDSII:Virtuoso+Pcell实战避坑指南(以TSMC65nm振荡器为例)

本文以TSMC65nm工艺下的振荡器设计为例,详细解析了Virtuoso环境中Pcell的最佳实践方案,涵盖变量管理、版图设计、Calibre验证等关键环节。通过实战案例和避坑指南,帮助工程师高效完成从原理图到GDSII的转化,特别针对LVS验证和参数化单元设计提供了实用解决方案。

fff88的博客 900

MIDP详解

1、MID(Mobile Information Device)特性由于MID这类设备,在屏幕、内存、处理器等问题上有诸多限制,在手机或是PDA等MID上开发应用程序必须要考虑一些技术上的特殊点。下面给出一些设备的特性: ·显示(display):96x54 (最小屏幕尺寸),1bit(最小色深,单色) ·输入设备: “one-handed keyboard”(指ITU-T手机

dodream的专栏 1884

Moveit +Gazebo:搭建单臂机械臂仿真平台

Moveit +Gazebo:搭建单臂机械臂仿真平台

magic_invaid的博客 5293

基于ARM的KVM移植优化MIDP程序

基于ARM的KVM移植优化MIDP程序李振鹏版权所有,转载请注明出处                最近研究ARM体系结构与编译器,并且有幸接触到了JVM在Nucleus上移植,因此对于特定应用优化有了更进一步的了解。下文将介绍一部分ARM优化技术,主要包括指令优化,缓存优化,驱动优化。对J2ME程序编写者而言,优化主要包括速度、内存以及存储空间优化。下文将分别根据ARM处理优化技

李振鹏的专栏 2372

IFRS 9与CECL对比解析:跨国企业财务必须掌握的两种信用损失模型

本文深度解析IFRS 9与CECL两种信用损失模型的差异,帮助跨国企业应对财务合规挑战。从基础架构、数据治理到监管策略,详细对比三阶段模型与单一阶段模型的核心区别,并提供实施双轨制的实务建议,助力企业优化资本管理和税务筹划。

3c4x5z6v7b的博客 669

STM32G4 电机外设篇(三) TIM1 发波 和 ADC COMP DAC级联

STM32G4电机控制外设应用笔记摘要:本文详细介绍了TIM1高级定时器生成三对互补PWM波的配置方法(预分频器PSC=30000,重装载值ARR=10000),重点说明需断开电机连线避免干扰。通过STM32CubeMX配置TIM1通道4触发ADC采样,设置RCR分频参数,并给出Keil代码修改要点。第二部分探讨了TIM1、ADC、比较器和DAC的级联应用,包括电流采样触发时序(在PWM波峰值前采样)和过流保护机制。配置步骤包含DAC3作为比较器负输入端、设置Break触发封波保护,并附关键代码段实现外设联

qq_43091070的博客 1102

[转载]MIDP程序中设置和得到MIDlet属性

MIDP程序中设置和得到MIDlet属性在MIDlet程序打包成为MIDlet Suite在JAR包的MANIFEST.MF文件中包含有各种属性,一部分属性是系统指定的,用户也可以设置自定义的属性。本文简单介绍一下如何设置和获取...

congji3817的博客 215

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

使用JBuilder和WTK2.2搭建MIDP1.0和MIDP2.0开发环境

作者:efei  文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=161我们知道,WTK最新的是2.2版本。我很喜欢使用这个版本,为什么呢? 1、包含了JSR-184 Mobile 3D API for J2ME?,并有一个DEMO,让我们领略了手机3D游戏的风采。 2、默认的模拟器够大,用起来非常的舒服 3、同时包含了M

mobilechannel的专栏 1169

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

MIDP2.0中Alert的新特性

作者:mingjava   文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=103Alert类继承自Screen,它的作用是通知用户发生异常信息。在高级用户界面API中有三个类是不能有父容器的,他们必须要占据屏幕,其中一个就是Alert,另外两个是List和TextBox。在MIDP1.0中,Alert的灵活性比较差,表示

mobilechannel的专栏 750

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MIDP对应的设备特性(转)

由于MID这类设备,在屏幕、内存、处理器等问题上有诸多限制,在手机或是PDA等MID上开发应用程序必须要考虑一些技术上的特殊点。 下面给出一些MID设备的特性: 显示(display):96x54 (最小屏幕尺寸),1bit(最...

cuankuangzhong6373的博客 1486

全面分析MIDP通信API和外部系统交互

[转载于yesky]   摘要   在这个MIDP系列的最后一部分,我将介绍MIDlet和外部系统之间的通信方法。使用Java2 Micro Edition的MIDP中包含的API,开发者可以与外部的系统交互。这篇文章将以一个详细的例子介绍这些API,它演示了J2ME设备和一个基于servlet的Web系统可以进行的交互。   在前面的两个部分,我介绍的MIDP API的特性和功能都是

crazymens的专栏 882

使用JBuilder和WTK2.2搭建MIDP1.0和MIDP2.0开发环境(转)

我们知道,WTK最新的是2.2版本。我很喜欢使用这个版本,为什么呢? 1、包含了JSR-184 Mobile 3D API for J2ME?,并有一个DEMO,让我们领略了手机3D游戏的风采。 2、默认的模拟器够大,用起来非常...

cuankuangzhong6373的博客 197
上一篇: 如果不用为生活奔波,我愿意成为一个自由作家
下一篇: javax.ImageIO使用指导
mingjava
博客等级 码龄24年 68粉丝 114原创
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值