2009年6月7日

MIDlet的生命周期

 

MIDlet的生命周期:

JAM需要改变MIDlet状态的时候,需要调用对应方法,在方法调用成功以后,MIDlet的状态最终才会发生改变。

除了JAM可以改变MIDlet的状态,MIDlet自身也可以调用一些方法,改变自身的状态。然后再通过Notify的系列函数通知JAMMIDlet的状态需要进行改变。


一个
MIDlet对象有三个状态,分别是:运行状态、暂停状态、终止状态。

JAM通过调用startApp()函数使MIDlet进入到开始状态,也就是说把我们的游戏进入开始状态;JAM通过调用pauseApp()使MIDlet进入暂停状态;通过调用destroyApp ()使之停止掉。

MIDlet不允许直接调用System.exit()Runtime.exit()来结束MIDlet的生命周期,这种方式会引起Java的安全异常。当MIDlet需要自己结束生命周期的时候,首先调用destroyApp(),然后通过notifyDestroyed()通知JAM结束MIDlet的运行。

MIDlet类的其他功能:

除了生命周期相关的操作以外,MIDlet类中还提供了其他一些系统级的操作,例如:

 getAppProperty——读取jad文件中属性的设置。说明:jad文件是J2ME程序发布时的描述文件,在其中可以存储一些常用的属性信息。

platformRequest(String URL)——平台请求方法,该方法需要MIDP2.0,例如可以实现如下两个系统功能:

1.拨打电话实现:

              platformRequest(“tel:1860”);

2.打开指定网页

              platformRequest(“http://www.test.com”);

posted @ 2009-06-07 19:10 winlinglin 阅读(274) | 评论 (0)编辑 收藏

J2ME的体系结构

 

在J2ME的两个基本配置CDC和CLDC是按照如下的标准进行区分的。
CLDC:

512 KB 以下内存
有限能源供应(通常使用电池)
有限或非持续网络连接
简单的用户界面
16位或者32位的处理器
CDC:

2M以上内存
具有网络连接能力,通常为无线网络
需要实现java虚拟机规范的全部功能
32位或者64位的处理器

    从上述的要求中我们不难看出CLDC主要针对那些资源非常受限的设备比如手机、PDA、双工寻呼机等。而CDC主要面对那些家电产品,比如机顶盒、汽车导航系统等。
    下面我们来看看J2ME平台的结构图:


   
我们可以看出J2ME的核心是Configuration,在它里面定义了java的虚拟机,通过它来和底层的Host OS打交道。Profile提供了访问设备的IO或者图形界面的能力,这样Configuration和Profile共同构成了J2ME的运行环境。比如CLCD/MIDP可以提供给你开发手机程序的环境。在Profile之上针对不同的设备还可以提供不同的可选开发包。
    由于CLDC/MIDP大家都比较熟悉了,我们下面主要介绍一下基于CDC的J2ME系统构架,同样还是看它的系统图:


    基于CDC的设备可以支持全部的Java2语言规范和Java虚拟机规范,它是CLDC的超集并且远大于CLDC,因此基于CLDC的程序是可以无修改的移植到基于CDC的设备的。Foundation Profile是对CDC进行扩展的Profile,但是他并没有提供GUI的开发包,GUI是在Personal Basic Profile中进行定义的,它提供了AWT的一个子集给开发人员。它还提供了Xlet应用程序模式——针对java TV。Personal Profile是Personal Basci Profile的超集。他提供了对Applet的支持,丰富了AWT的组件,添加了java.awt.datatransfer包。

posted @ 2009-06-07 19:05 winlinglin 阅读(121) | 评论 (0)编辑 收藏

基本概念

JAM
 JAM(Java应用管理器)。Java应用管理器是管理Java 应用的机制。JAM的规范主要由目标环境决定,与Java规范无关。
 JAM管理应用在手机上的生命周期,其功能包括:鉴定概要、解析JAD(应用描述文件)、应用安装、应用更新、应用列表、应用执行。   
 JAM还管理JAR文件和JAD文件。JAR是Java应用档案文件,JAD是Java应用描述文件。此外,JAM还有管理Java虚拟机的功能。

JAR/JAD
Jad 
 jad是java应用程序的描述性文件,它所表述的内容很多,比如游戏提供商、游戏的版本号、游戏文件的大小等等,当然还有jar的地址。
JAD描述文件必须提供如下属性:
MIDlet-Name
MIDlet-Version
MIDlet-Vendor
MIDlet-Jar-URL
MIDlet-Jar-Size
Jar
 Jar是一个压缩的文件,在文件中包含了运行游戏的class代码和资源文件(图片、声音文件等等)。
一个完整的MIDP应用程序是由一个JAD文件(纯文字文件)与JAR(ZIP压缩档)所组成。在手机上安装游戏的时候,手机首先来找到jad文件,通过jad文件来解析jar文件。
也就是说,任何的手机游戏在真机上只需要这两个文件,即jad和jar文件。并非每种装置在安装时都要求同时有JAD与JAR,有些装置只需要JAR即可。
不过,有JAD和没有JAD的J2ME应用程序在安全性上是有差异的。

MF文件
MF文件是配置文件(manifest),用来描述MIDlet Suite的配置,如:名称,版本,开发商等;manifest文件为纯文本文件,文件扩
展名为.mf
manifest必须包含以下属性:
MIDlet-Name
MIDlet-Version
MIDlet-Vendor

MIDlet
一个MIDP应用程序称作MIDlet——MIDP小应用程序,它不能够单独地运行,必须运行在特定的环境之中,或者说运行在一个容器中。可以把这个容器看作是个大的应用程序
,它运行在Java虚拟机之上,但不能完成任何特定的任务,因此需要程序开发者编写代码以完成一项工作。
通过这种形式,程序开发者就从各种运行环境、各种设备中解放出来,只需设计一个MIDlet,就可以在不同的环境上运行。比如不同的厂家、不同型号的手机,只要它支
持J2ME、支持MIDP,就有这样一个容器。
MIDlet中这个容器就是MIDP实现,它以SUN公司发布的CLDC规范和MIDP规范为标准,然后针对设备进行移植,从而提供给所有的MIDlet都一样的容器内部接口。编写MIDP应
用程序的要求就是必须扩展MIDlet类 。
当Java应用管理器将MIDlet装载进来,会生成一个MIDlet对象实例,该对象的生命周期完全由Java应用管理器控制,在需要改变MIDlet对象状态的时候,由Java应用管理
器会调用MIDlet中对应的函数对这个对象进行控制。



posted @ 2009-06-07 19:01 winlinglin 阅读(143) | 评论 (0)编辑 收藏

J2ME开发环境的配置

J2ME开发环境的配置

1. JDK 
到java.sun.com/j2se 下JDK,可以根据需要下载JDK的版本,推荐1.5,1.6.在下载之前,还要填写烦人的个人信息,还要到邮箱拿下载地址...囧一个。
2. WTK
到java.sun.com/j2me 下WTK,推荐2.5版本.装之前需要JDK.这个终于不用填个人信息了.呵呵
装完WTK后,有几个文件夹的内容比较重要:
lib\里的是类库,cldcapi21,midpapi21这些基础类能少吗?少了怎么开发啊?
bin\里的是开发时用的工具程序.emulator模拟器,用了它,就能省了买手机的钱了....
docs\是midp文档,经常使用,时时使用,必须使用....
apps\里的是各位天才写的实例demo,懂了后就不是小牛这么简单了....
wtklib\存放J2MEWTK用到的类库和一些资源。
3. IDE
一般人都用eclipse加eclipseME插件。
下载网址是:
eclipse: www.Eclipse.org
eclipseME: www.eclipseme.org
装完后eclipse,记得添加eclipseME插件,接着就是建立一个midlet suite项目来添加设备,搜索WTK目录就可以找到模拟器了。呵呵....

所有工作干完了,歇歇就开始我们的J2ME之旅吧...

posted @ 2009-06-07 18:57 winlinglin 阅读(140) | 评论 (0)编辑 收藏

J2ME的双缓冲技术(转)

关于J2ME中双缓冲技术:
双缓冲技术是编写J2ME游戏程序的关键技术之一。实际上,双缓冲技术是计算机动画的一项传统技术。造成屏幕闪烁的主要原因在于,画面在显示的同时程序又在改变它,于是画面闪烁。

解决办法是在内存中开辟一片区域作为后台画面,程序对它更新、修改,完成后再显示它。这样被显示的图像永远是已经完全画好的图像,程序修改的将不是正在被显示的图像。当然还有其他方法可以解决屏幕闪烁问题,但使用双缓冲技术是一种值得推荐的解决方案。

有些设备本身就支持双缓冲,每次都是先把屏幕重画在缓冲之中,然后再绘制在显示屏幕上,而不是直接绘制在显示屏幕上。可以使用Canvas类的isDoubleBuffer方法判断设备是否具有双缓冲。

可变图像可以很容易地用作屏幕外缓冲。改写前面绘制不变图像的代码,将所有的绘制都放在可变图像中,然后一次性地将可变图像绘制到屏幕上去。

  1. package doublebufferdemo;
  2. import javax.microedition.lcdui.*;
  3. import javax.microedition.midlet.*;
  4. import java.io.*;
  5. public class ImageCanvas extends Canvas
  6. {
  7.  
  8.    private Image buffer;                        //可变图像,作为绘制缓冲
  9.    private Image image;                          //不变图像,用来加载图片文件
  10.    public ImageCanvas()
  11.    {
  12.       try
  13.       {
  14.         image = Image.createImage("/tree.png")//加载图片文件
  15.       }catch(java.io.IOException e)
  16.       {
  17.         System.out.println(e.getMessage());      //处理I/O异常
  18.       }
  19.       buffer = Image.createImage(this.getWidth(), this.getHeight());
  20.                                                 //用一个可变图像作为绘制缓冲
  21.       Graphics bg = buffer.getGraphics();        //获取缓冲的Graphics对象
  22.       bg.setColor(0xFFFFFF);
  23.       bg.fillRect(0, 0, getWidth(), getHeight());    //填充整个屏幕
  24.       bg.drawImage(image,this.getWidth()/2,this.getHeight()/2,    <a href="http://www.sunjianyes.cn/Article/tag/graphics">Graphics</a>.VCENTER|Graphics.HCENTER);
  25.    }
  26.    public void paint(Graphics g)
  27.    {
  28.       g.drawImage(buffer,0,0,g.TOP|g.LEFT);      //将缓冲区上的内容绘制到屏幕上
  29.    }
  30. }

编译、运行程序,其结果和前面完全相同,但是却采用了双缓冲技术。对于双缓冲的使用,可以总结出以下几点。

* 定义一个Graphics对象bg和一个Image对象buffer,按屏幕大小建立一个缓冲对象赋给buffer,然后取得buffer的 Graphics对象赋给bg。在这里,Graphics对象可以理解为缓冲的屏幕,Image对象则可当成缓冲屏幕上的图片。

* 在bg(缓冲屏幕)上用drawImage()和drawString()等语句画图,相当于在缓冲屏幕上画图。

* 调用repaint()语句,它的功能是告知系统调用paint()来完成真实屏幕的显示。这里需要注意的是,paint()是一个系统调用语句,不能手工调用,只能通过paint()语句来调用。

* 在paint(Graphics g)函数里,将buffer(缓冲屏幕上的图片)画到真实屏幕上。

以上的步骤虽然看似繁琐,但是本身在不支持双缓冲机制的时候是必须的,回过头来看效果还是很不错的。如果想在屏幕上显示什么东西,只要画在bg上,然后调用repaint()将其显示出来就可以了。

posted @ 2009-06-07 17:52 winlinglin 阅读(458) | 评论 (0)编辑 收藏

开BOLG

世界真是很奇妙,你永远不知道下一秒会发生什么?
我学了3年的CPP,想想CPP是多么完美的语言的,做什么都可以。能操作内存,又能满足我的控制欲...呵呵。
想不到的是,我的第一份工作竟然是做J2ME的....
自己也想不明白,为什么老板明明知道我是CPP的,还硬要我来转JAVA呢?
难得老板厚爱,公司也不错。我就干了。
今天开始,系统学习J2ME。

posted @ 2009-06-07 17:03 winlinglin 阅读(86) | 评论 (0)编辑 收藏

仅列出标题  
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜