KJava在移动设备中的应用

来源:互联网 发布:linux mint 和ubuntu 编辑:程序博客网 时间:2024/04/29 19:42
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

  摘要:对J2ME规范的内容以及与其它版本的关系进行了简要介绍,并结合摩托罗拉的SDK讲解了如何用KJava编写应用程序。

  关键字:KJava;J2ME;移动信息设备

  摩托罗拉A6288、388型手机的登场,伴随着一个亮点:自身带有KJava虚拟机(KVM),能够通过多种方式下载且能够运行用户用KJava编写的符合MIDP1.0规范的应用程序。后来,又有多款手机支持KJava。实际上,KJava不仅能够为A6288等手机编写应用程序,而且还可以为其它一些移动信息设备编写应用程序。这类嵌入式程序和一般的Java程序相比,有它的特殊之处,本文将对KJava及其应用进行介绍。

  1.KJava简介

  Java语言最初是为嵌入式系统设计的一项产品,在Java 2中为了区分各种不同的应用,又细分成了Java 2 Enterprise Edition(J2EE)、Java 2 Standard Edition(J2SE)和Java 2 Micro Edition(J2ME)三种版本,其中J2ME又称作KJava

  在J2SE中,它定义了Java规范的核心类函数库(即Java.*)和扩展类函数库(即Javax.*),它主要定位在客户端的应用程序。J2EE主要定位于服务器端的应用程序,它除了支持J2SE所定义的核心类函数库之外,还增加了一些扩展函数类库,如支持Serverlet/JSP的javax.servlet.*等。J2ME只支持J2SE所定义的核心函数类库的一部分,此外,在J2ME中还增加了一些支持嵌入式系统的扩展类函数库,如javax.microedition.*等。

  同样是嵌入式设备,它们在运算能力、电力供应等方面还是有很大的差别。Connected Limited Device Configuration(CLDC)规范描述的就是那些运算能力有限、电力供应有限的嵌入式设备,如手机等;而Connected Device Configuration(CDC)规范则描述的是像电视机顶盒这样运算能力较强、电力供应充足的系统。J2ME分别支持这两种不同的配置。在同一种配置下,J2ME又通过Profile来定义与特定嵌入式设备相关的扩展类函数库。

  在传统的Java环境中,为了防止程序在传送途中被篡改以及其它一些安全上的考虑,当程序被类别载入器载入后,紧接着要进行Byte Code审核,审核通过以后才允许Java虚拟机执行它。这一操作在PC机上执行从速度上来看没有什么问题,但是在CLDC所描述的这类系统中,要想作完全相同的处理,从处理能力和速度上来看就显得有些力不从心了。为了解决这个问题,程序设计人员需要在程序设计结束之后额外再多做一件事:预先审核。通过预先审核,会在最终的类文件中加入一些特殊的符号,当该程序下载到目标平台上去执行时,可以以较快的速度完成审核操作。

  2. Motorola SDK

  下面以摩托罗拉A6288型手机为例来具体讲解KJava的程序设计。

  在摩托罗拉A6288中使用了两颗CPU,一颗是Dragon Ball VZ 33MHz,用于个人数字处理,另外一颗用于通讯的处理。系统为用户预留了约1M的内存空间,支持符合MIDP 1.0规范的KJava应用程序。我们可以到摩托罗拉的官方网站去下载开发工具:CodeWarrior(试用版),下面的内容就是基于这一开发工具。

  在CodeWarrior中,它包含了摩托罗拉的SDK,它实现了CLDC和MIDP 1.0。它所实现的CLDC类库有java.io.*、java.lang.*、java.util.*和javax.microedition.io.*,实现的MIDP类库有javax.microedition.lcdui.*、javax.microedition.rms和javax.micromedition.midlet。

  我们在PC环境下编写的嵌入在浏览器中的Java程序叫做Applet,编写的程序必须要从Applet类扩展自己的类。而为手机这类移动信息设备编写的KJava程序叫做MIDlet,程序必须要从MIDlet类扩展自己的类。一个MIDlet程序具备如下的典型结构:

  public class HelloWord extends MIDlet

  {

  HelloWord()

  {……}

  public void startApp()

  {……}

  public void pauseApp()

  {……}

  public void destroyApp(boolean unconditional)

  {……}

  }

  当程序被启动时,startApp()被系统调用。(当程序刚开始运行时有启动过程,程序被暂停后也可以被再次启动)。当程序被暂时停止运行时,pauseApp()被调用。当程序执行结束时destroyApp()被调用。我们可以根据实际情况在各函数中进行相应的处理。

  在摩托罗拉SDK中没有AWT或者SWING,因为它们的实现会耗费太多的资源,摩托罗拉SDK只是在javax.microedition.lcdui中实现了基于LCD的一些比较简单的设计用户界面的功能。SDK中定义了各种Displable类(如Form),程序中当前显示的画面必须是某个Displable的实例,在该实例中可以再放置按钮、文本编辑框、单选框等UI。

  3. 举例

  下面是用KJava编写的一个可以在A6288型手机上运行的简单的例子。具体程序如下:

  import java.io.*;

  import javax.microedition.lcdui.*;

  import javax.microedition.midlet.*;

  public class HelloWorld extends MIDlet implements CommandListener

  {

  private MainCanvas myCanvas;

  private Display myDisplay;

  private Command c1,c2,c3;

  HelloWorld()

  {

  myCanvas=new MainCanvas();

  myCanvas.addCommand(c1=new Command("First",Command.SCREEN,1));

  myCanvas.addCommand(c2=new Command("Second",Command.SCREEN,1));

  myCanvas.addCommand(c3=new Command("Third",Command.SCREEN,1));

  myCanvas.setCommandListener(this);

  myDisplay = Display.getDisplay(this);

  myDisplay = Display.getDisplay(this);

  }

  public void startApp() throws MIDletStateChangeException

  { myCanvas.setUp("first");

  myDisplay.setCurrent(myCanvas);

  }

  public void pauseApp() { }

  public void destroyApp(boolean unconditional) { }

  public void commandAction(Command c,Displayable d)

  { myCanvas.setUp(c.getLabel()); }

  class MainCanvas extends Canvas

  { String ts;

  MainCanvas()

  { super();

  ts=new String("first");

  }

  public void setUp(String s)

  { ts=new String(s); }

  public void paint(Graphics g)

  { g.setColor(0xFFFFFF);

  g.fillRect(0, 0, getWidth(), getHeight());

  g.setColor(0);

  g.drawString("Current is the "+ts,getWidth()/2,60,

  Graphics.HCENTER | Graphics.TOP);

  }

  }

  }

  程序运行后,可以根据用户选择的不同菜单项显示不同的内容。

  4. 结束语

  由于受到硬件环境的限制,目前所能够写出来的MIDlet程序功能有限,用户界面很单调,不过随着硬件环境的提高,这一问题会得到改善。

<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 精子形态正常率2怎么办 精子头部畸形率高怎么办 椎底动脉供血不足怎么办 颈椎动脉供血不足怎么办 颈椎病引起头晕脑供血不足怎么办 淘宝店被释放了怎么办 被枣蝎子蛰了怎么办 六角螺丝拧花了怎么办 苹果螺丝滑丝了怎么办 六角螺帽拧花了怎么办 六角螺母拧花了怎么办 内六角螺丝滑丝怎么办 十字螺丝拧花了怎么办 梅花螺丝滑丝了怎么办 螺丝孔道滑丝了,怎么办 锅把铆钉松啦怎么办 膨胀螺丝孔大了怎么办 戒指不圆了怎么办妙招 眼镜框的腿断了怎么办 弹簧腿眼镜坏了怎么办 vps搭建ss被墙怎么办 注塑机螺杆黏料怎么办 分解师耐久度0了怎么办 有鼻涕擤不出来怎么办 擤鼻涕耳朵堵了怎么办 脸用什么都过敏怎么办 1岁宝宝流清鼻涕怎么办 2岁宝宝流清鼻涕怎么办 3岁儿童流清鼻涕怎么办 鼻子老是流清水鼻涕怎么办 5岁儿童感冒鼻塞怎么办 3岁宝宝感冒鼻塞怎么办 宝宝9个月流鼻涕怎么办 鼻涕又黄又粘稠怎么办 鼻子一直流黄水怎么办 宝宝眼屎多又黄怎么办 宝宝痰多鼻涕多怎么办 小孩痰多鼻涕多怎么办 用qq登不了微博怎么办 中国银行u盾丢了怎么办 我的世界遇见him怎么办