推荐给好友 上一篇 | 下一篇

KJava在移动设备中的应用


声明
  • 声明: 1、任何网站转载本站点内容时需注明来自JAVA-CN.COM,否则我们有权将根据《互联网著作权行政保护办法》追究其相应法律责任; 2、JAVA中文站社区刊登此文只为传递信息,并不表示赞同或者反对.
摘要:对J2ME规范的内容以及与其它版本的关系进行了简要介绍,并结合摩托罗拉的SDK讲解了如何用KJava编写应用程序。
^E]i xP9w5m+} k
u{ CX{,q  关键字:KJava;J2ME;移动信息设备
wUK%C Y5nb.Z
c8iC)Ov3\#j3_InG  摩托罗拉A6288、388型手机的登场,伴随着一个亮点:自身带有Kjava虚拟机(KVM),能够通过多种方式下载且能够运行用户用Kjava编写的符合MIDP1.0规范的应用程序。后来,又有多款手机支持Kjava。实际上,Kjava不仅能够为A6288等手机编写应用程序,而且还可以为其它一些移动信息设备编写应用程序。这类嵌入式程序和一般的Java程序相比,有它的特殊之处,本文将对Kjava及其应用进行介绍。
.P(sm0q.J[?w2` ^/S
l;m:\s[G9fx|  1.KJava简介
!o&\6V M-NH w
-D%uANX"X  Java语言最初是为嵌入式系统设计的一项产品,在Java 2中为了区分各种不同的应用,又细分成了Java 2 Enterprise Edition(J2EE)、Java 2 Standard Edition(J2SE)和Java 2 Micro Edition(J2ME)三种版本,其中J2ME又称作Kjava。JAVA中文站社区门户?BL'T,[(n
JAVA中文站社区门户e0bQ4O~$f
  在J2SE中,它定义了Java规范的核心类函数库(即Java.*)和扩展类函数库(即Javax.*),它主要定位在客户端的应用程序。J2EE主要定位于服务器端的应用程序,它除了支持J2SE所定义的核心类函数库之外,还增加了一些扩展函数类库,如支持Serverlet/JSP的javax.servlet.*等。J2ME只支持J2SE所定义的核心函数类库的一部分,此外,在J2ME中还增加了一些支持嵌入式系统的扩展类函数库,如javax.microedition.*等。JAVA中文站社区门户p&U2Y2q/h-TvD#g^
JAVA中文站社区门户3F Y+htc _L
  同样是嵌入式设备,它们在运算能力、电力供应等方面还是有很大的差别。Connected Limited Device Configuration(CLDC)规范描述的就是那些运算能力有限、电力供应有限的嵌入式设备,如手机等;而Connected Device Configuration(CDC)规范则描述的是像电视机顶盒这样运算能力较强、电力供应充足的系统。J2ME分别支持这两种不同的配置。在同一种配置下,J2ME又通过Profile来定义与特定嵌入式设备相关的扩展类函数库。JAVA中文站社区门户I2D.e)lK~v

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

V7KSP1Z/_ i,IH]  2. Motorola SDKJAVA中文站社区门户o zn9AXG

#z0F'TjgB `*fk)L  下面以摩托罗拉A6288型手机为例来具体讲解Kjava的程序设计。JAVA中文站社区门户D2W+U&I'g5Y'|DC0X,d

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

v3^a!@.]N2RE%y}  在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。
,]BC#IH dJAVA中文站社区门户L(r5U.hXw/r
  我们在PC环境下编写的嵌入在浏览器中的Java程序叫做Applet,编写的程序必须要从Applet类扩展自己的类。而为手机这类移动信息设备编写的Kjava程序叫做MIDlet,程序必须要从MIDlet类扩展自己的类。一个MIDlet程序具备如下的典型结构:JAVA中文站社区门户y eS&CJ
JAVA中文站社区门户4b6L2z%Qkp
  public class HelloWord extends MIDletJAVA中文站社区门户+t)U'ON;O;O0Q_

"{-f&hF)m {5q/cC  {JAVA中文站社区门户Q0eS7i!]:i,g-FQ

o~ F5g+z:mz&I3[ZuM[  HelloWord()JAVA中文站社区门户Q{8T'fxs%W@3UB
JAVA中文站社区门户WH.UiG7I6~._ Kb
  {……}JAVA中文站社区门户5~:Z/o0oF-o @I
JAVA中文站社区门户 nK HE7W5n
  public void startApp()JAVA中文站社区门户T"\5V9m5m:M-K
JAVA中文站社区门户7A$s4Fp@u@CB
  {……}JAVA中文站社区门户 u7rXR[

NI d0IsCs,Ip  public void pauseApp()
'Y~.x8Sb.[^7fV
Li _ SX3|c`[b  {……}JAVA中文站社区门户D_^ lur R
JAVA中文站社区门户?*k9V(j+~*xw
  public void destroyApp(boolean unconditional)JAVA中文站社区门户w%mz;W[&uG

w _i{#d~"w d2r  {……}
-p T`!zeq:v)kWJAVA中文站社区门户wU.B1q+_x&x
  }
lUb!a9NDY {%N
BiB X$]:b+G\*Hl2a  当程序被启动时,startApp()被系统调用。(当程序刚开始运行时有启动过程,程序被暂停后也可以被再次启动)。当程序被暂时停止运行时,pauseApp()被调用。当程序执行结束时destroyApp()被调用。我们可以根据实际情况在各函数中进行相应的处理。JAVA中文站社区门户tu R&|"s9V3|

t{AUg*[*Y'A8e  在摩托罗拉SDK中没有AWT或者SWING,因为它们的实现会耗费太多的资源,摩托罗拉SDK只是在javax.microedition.lcdui中实现了基于LCD的一些比较简单的设计用户界面的功能。SDK中定义了各种Displable类(如Form),程序中当前显示的画面必须是某个Displable的实例,在该实例中可以再放置按钮、文本编辑框、单选框等UI。
.L,V?2F7L#N @b7BJAVA中文站社区门户Y%U:GW@aS1q
  3. 举例JAVA中文站社区门户~*~6KIpv

N{T5E+|2yx  下面是用Kjava编写的一个可以在A6288型手机上运行的简单的例子。具体程序如下:
#p2{1TI]
Z5L$\GlT  import java.io.*;
9NA8R5ZVJAVA中文站社区门户 tCc%cZ8wX-Q%V7]
  import javax.microedition.lcdui.*;
G f&SOoLyj
vP e ON1KX  import javax.microedition.midlet.*;JAVA中文站社区门户v8@4p3TFBK!~ {v2BG

S |f}MR  public class HelloWorld extends MIDlet implements CommandListener
h C'd^ n6N{ y p(X,i
K+yn[/B p$T~D.O  {JAVA中文站社区门户dD BN&Kz%SV.i9v
JAVA中文站社区门户2a8^5s3V D$S8}
  private MainCanvas myCanvas;JAVA中文站社区门户,@$s5iQ3m o!F7AS

gc8Dv.EF${  private Display myDisplay;JAVA中文站社区门户&{+g[E3ONQ

SXA8m&vC%E  private Command c1,c2,c3;JAVA中文站社区门户M4ac*lD
JAVA中文站社区门户x8?:pX(I:}
  HelloWorld()
mT1q,R*U:Y6kJAVA中文站社区门户1yes~'Z#}`d
  {
3v)eu wf0Y*vJAVA中文站社区门户n(jt:g,Q;E'i
  myCanvas=new MainCanvas();
XX+EX _ U t,|3tP
H+lw I?pAb  myCanvas.addCommand(c1=new Command("First",Command.SCREEN,1));
3K t dz$?$K6})IC1R
}%j-K_;e U eC  myCanvas.addCommand(c2=new Command("Second",Command.SCREEN,1));JAVA中文站社区门户m$p$j/R/nMp%F1_{

Y,Z(D{$Kwc'k  myCanvas.addCommand(c3=new Command("Third",Command.SCREEN,1));
u.m3r Xg1dJAVA中文站社区门户5m2|e4s[(bY#\.aM\]
  myCanvas.setCommandListener(this);
x4lK Fi6AY!KJAVA中文站社区门户*L#Cia ?*[9k
  myDisplay = Display.getDisplay(this);JAVA中文站社区门户x"rf"@B[/@$PRU

.bQO-i.|;At  myDisplay = Display.getDisplay(this);JAVA中文站社区门户7K1e]2c%d;p"UY5K,X

7V*O3hmvWW&z  }
#]:g!LZ!ni
/jZ FB YHj&grQ  public void startApp() throws MIDletStateChangeException
0WJu!K1K;Ik ^)q
O,g pj/H!e0ruh  { myCanvas.setUp("first");
j*`"hC#N'])v3mJAVA中文站社区门户2Ves8\B W'f
  myDisplay.setCurrent(myCanvas);JAVA中文站社区门户W~lV[P"t2G/y

}tJsh\9H  }JAVA中文站社区门户{3E-hgn|PTb
JAVA中文站社区门户L@&l}H
  public void pauseApp() { }JAVA中文站社区门户 P;m3q$cpq,AE

S%VT:r})\  public void destroyApp(boolean unconditional) { }JAVA中文站社区门户:f8ul,W1mr{ bc

zk%L6QQ4o  public void commandAction(Command c,Displayable d)
#}/cS&k+sE W
wl}U} hb8y  { myCanvas.setUp(c.getLabel()); }
$i;eZ)@B~ sJAVA中文站社区门户c%a{P:f*NK,E
  class MainCanvas extends Canvas
"XrpLx&q'vE B7L
_Vp6gZN {  { String ts;
#vx-j7L V+\)X*C] sJAVA中文站社区门户(~_'X3V8AJ Nj
  MainCanvas()
'@p+VjIs x.P6gQ]
9|S+~ @ U1t4m%Hs  { super();
$}`w`j9~JAVA中文站社区门户N7dzF Uo+k'N1x
  ts=new String("first");JAVA中文站社区门户)kbV Xc6sB
JAVA中文站社区门户5U UQ\D8A"x
  }
+\+R X ^+[O h9W RJAVA中文站社区门户.?*rGT\bhC
  public void setUp(String s)
0TP$O(I"JJAVA中文站社区门户$x,|^] C8rp,ZW
  { ts=new String(s); }JAVA中文站社区门户x%CsX J3]%Xi
JAVA中文站社区门户 xpUF,L5_ |"h
  public void paint(Graphics g)JAVA中文站社区门户&w:{F$t%?0}&U'p

T\,Ed@6znY  { g.setColor(0xFFFFFF);JAVA中文站社区门户\ oZ"tw%len\

G5M5e%fgzI  g.fillRect(0, 0, getWidth(), getHeight());
[?|#hnp;p Xs
+VwM~Q  g.setColor(0);JAVA中文站社区门户R8w+X$d ~/L`
JAVA中文站社区门户KW e mjk(Rb
  g.drawString("Current is the "+ts,getWidth()/2,60,JAVA中文站社区门户$zr@/{'C7]

'[p7b$JW1m  Graphics.HCENTER | Graphics.TOP);JAVA中文站社区门户Y/]dKB
JAVA中文站社区门户] r+SI e$_x1x:iC
  }
Q)n$`KinJAVA中文站社区门户^eR L7Dwz|
  }JAVA中文站社区门户WWdJ)q"]J+dN

)K4p0VR/^  }
dU7tz*OX/Ror
jr%n o3R@n#?+Z mK&w  程序运行后,可以根据用户选择的不同菜单项显示不同的内容。JAVA中文站社区门户6gLiQ%H

ie+A&{#Is!n  4. 结束语
JP Y%c)W!E
1@%C6m0^;S(b&yLp  由于受到硬件环境的限制,目前所能够写出来的MIDlet程序功能有限,用户界面很单调,不过随着硬件环境的提高,这一问题会得到改善。

TAG: 移动设备 应用 KJava
 

评分:0

我来说两句

seccode