摩托罗拉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);
}
}
}
程序运行后,可以根据用户选择的不同菜单项显示不同的内容。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器