欢迎光临
我们一直在努力

J2ME学习札记 1-11-JSP教程,资料/其它

建站超值云服务器,限时71元/月

发信人: javalover (欲下未下风悠扬), 信区: java
标 题: j2me学习札记
发信站: 北大未名站 (2001年10月17日22:22:58 星期三) , 站内信件

(1)—–什么是j2me?
j2me就是java 2 platform,micro edition的缩写。j2me是java 2的一个组成部分,与j2
se、j2ee并称。根据sun microsystems,inc.的定义:j2me是一种高度优化的java运行环境,针
对市面上的大量消费类电子设备,例如papers、cellular phones(蜂窝电话), screen-phones
(可视电话?)、digital set-top boxes(数字机顶盒)、car navigation systems(汽车导航
系统)等等。
j2me技术在1999年的javaone developer conference大会上推出。j2me技术将java语言
的与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用程序。

(2)—-为了学习j2me技术,我需要安装什么样的软件?
1)、j2me wireless toolkit
j2me wireless toolkit简称j2mewtk,目前最新的版本就是1.0.3 beta,j2mewtk有什么用?打
一个比方,j2mewtk之于j2me程序的开发,就相当于jdk之于java程序的开发。j2mewtk是由sun
公司开发的,你可以到sun的网站去下载,这个工具和jdk一样,是完全免费的。
2)、j2se sdk 1.3
j2se sdk 1.3亦即jdk 1.3,jdk有什么用?相信学过java语言的人都知道,我就不多写了,在安
装j2mewtk之前,你必须确保你的系统已经安装了一个可用的jdk。建议不要使用jdk 1.2和jdk
1.4,前者版本低,后者不稳定。
3)、tomcat 3.2.3/4.0
tomcat 3.2/4.0用作服务器软件,为j2me手机提供服务。由于手机的资源有限,所以我们需要
尽量将商业计算集中于服务器端完成,减小客户端的负担,所以要开发j2me程序,一个服务器软
件是少不了的。我采用jsp作为服务器端的解决技术,所以我选用的web服务器是tomcat。但是
你也可以选用iis+asp、apache+php。这个选择不是唯一的。

(3)—-开发环境安装
第一步,安装jdk 1.3.0或者安装一个包含jdk 1.3.0的软件。我安装了jbuilder 5.0,它所带
的jdk是hotspot 1.3.0_01 client版。

第二步,安装j2mewtk 1.0.3 beta,在安装的过程中,需要选择系统中jdk的安装目录,安装程序
一般可以自动查出来jdk的安装目录,我们不用操心。

第三步,安装tomcat 3.2.3/4.0,tomcat 3.2.3是最稳定的3.x系列,推荐使用。tomcat 4.0刚
刚发布了正式版,也不妨一试。tomcat 3.2.3/4.0需要经过配置,才能够运行。

第四步,测试tomcat是否能够正常运行jsp程序。这一步很重要。

(4)—–j2me开发工具比较
1)、j2mewtk,这个工具在前文已经提到过,它是最基本的j2me程序开发工具,免费,体积小,速
度较快,完全遵守j2me的各种规范。具有简单的ide界面,易于上手,开发十分方便快捷,可以和
forte 3.0捆绑。j2mewtk适用于初学者和已经达到很高水平的开发者。窃以为j2mewtk+jdk+
editplus/ultraedit是绝配。评语:重剑无锋,大巧不工。

2)、visualage micro edition 1.4。这是ibm的产品,号称是j2me开发领域的top 1,但是我用
了半天,也没有看出好在那里。马上就删除了。窗口太复杂,不明所以,开发起来很难适应,速
度和j2mewtk一样,比较庞大,装了这个东西,你的c盘就要小心了,多了很多乱七八糟的文件,还
注册了许多com组件,典型的非绿色软件。评语:!#$#%$#$%$#%@$@#。

3)、codewarrior for java 6.0。这是motolola的产品,功能十分强大,集成度很好,开发,调
试,发布j2me程序都很方便(还可以做一般的java program)。它的ide和visual studio十分相
似,很容易上手。codewarrior比较适合中等水平的开发者的使用。不过codewarrior不是免费
软件,你只能够免费使用30天。评语:摩托罗拉codewarrior,随时随地j2me。

4)、borland jbuilder 5.0的nokia bobile版。没用过。评语:缺。

上述分析,仅供参考,仅代表本人意见。

5)——选择缺省的开发设备
在开发j2me应用程序之前,我们必须选择这些程序运行的平台,亦即开发出来的j2me程序
运行在那一种手机或者是移动设备上面。在开发的过程中,我们需要对j2me应用程序进行测试
,当然了,自己拥有一款支持j2me的手机是最好的,例如motolola的i85s,但是这个要求不是每
一个开发者都能够满足(我连手表都没有,更不用说手机了),因此,大多数的j2me开发环境都提
供了各种各样的手机、移动设备模拟器,你可以首先在手机模拟器上测试你的j2me程序,开发
完毕以后,再将程序交给专业的厂商(一般是移动设备提供商),由它们将程序载入手机中进行
真实的程序测试。模拟器和真实的设备之间有一定的差别,但是你的程序只要在模拟器上通过
了,那么问题不会很大。

j2mewtk提供六种模拟器,分别是:default color phone、default gray phone、minimum
phone、motolola i85s、palmos device、rim java handle。这些模拟器虽然外观不一样
,操作也不太一样,但是j2me程序在其上运行的结果是不会有什么区别的,在真实的设备上也是
没有什么区别的,这体现了java的跨平台特性。你还可以自定义自己的手机模拟器,这在j2me wtk的
user guide中有详细的描述。
在开发过程中,选择何种模拟器是十分重要的,原则上来说,你为那一种设备开发程序
,就要使用那一种设备的模拟器。但是j2me程序在不同的模拟器上的运行效果基本上是一致
,所以你也可以采用你自己喜欢的模拟器。我们推荐你选用rim java handle模拟器作为开发
的首选模拟器,因为它的屏幕很大,看起来很舒服(但是别忘了你的真实设备的屏幕大小)。
在j2mewtk中,可以设定缺省的模拟器,怎么设呢?从开始菜单选择j2mewtk—->default
device selection,在下拉列表框中选择模拟器的名字,然后单击ok按钮即可,j2mewtk就会把
这种模拟器认为是缺省的模拟器。你也可以在开发环境中每次手动选择模拟器,不过这样做显
然比较麻烦。j2mewtk在初始情况下,默认的模拟器是default color phone,说实在话,我从
来没有看见过这么难看的手机。

6)—–创建项目
现在开始尝试开发j2me程序。我的选择是windows xp 2600 professional+j2se sdk 1.3.0+
tomcat 4.0+j2mewtk 1.0.3beta。从开始菜单中选择j2mewtk—->ktoolbar。ktoolbar是
j2mewtk提供的一个简陋的ide工具。
进入ktoolbar以后,观察窗口,在菜单的下面有四个按钮,分别是:
new project:创建一个新的项目。
open project:打开一个项目。
setting:对当前项目的环境进行设置。
build:编译项目中的所有java文件。
run:启动缺省的模拟器,将当前项目载入,运行。
clear console:清除控制台输出。
在上述按钮的下面,有一个下拉列表框,在这里你可以设置当前项目所使用的模拟器,这个
设置可以覆盖缺省的模拟器。在此下拉列表框下面,是一个文本框,这就是所谓的控制台了。
所有编译、运行信息都会在这个控制台中输出。你可以使用clear console按钮将控制台中的
信息完全清除。
现在来看看菜单。ktoolbar的菜单极其简单,没有什么可说的。project菜单的package菜单
项的作用是将当前项目打包输出。这个菜单项特别有用,当你完成项目开发之后,使用这个菜
单项可以产生一个jar文件,这样就完成的项目的初步发布。
现在来创建一个新的项目,单击new project按钮,或者是使用file菜单的同名菜单项。出现
一个新窗口。这个新窗口有两个文本框,第一个文本框是project name,输入fancy。第二个文
本框是midlet class name,输入fancy.test.helloworld。然后单击ok,又出现一个对话框,要
你配置项目的环境,不理,单击ok按钮关闭该窗口,回到ktoolbar的主窗口。经过上述步骤,你
已经创建了一个名为fancy的j2me项目。

(7)—–j2mewtk的目录结构
安装j2mewtk以后,你应该仔细浏览一下j2mewtk的目录结构,这是一个很好的习惯。j2mewtk
的目录结构如下:
appdb文件夹:里面有duke的一些靓照。
apps文件夹:里面有j2mewtk的一些例子程序,我们建立的项目文件也存放在里面。
bin文件夹:里面全部是exe程序。
docs文件夹:不用多说了,是地球人都知道。
lib文件夹:存放midp api。
wtklib文件夹:存放j2mewtk用到的类库,以及一些资源文件,比如按钮的图标等等。
在这些文件夹中,apps文件夹特别需要留意,这个文件夹有下列子文件夹:
example:存放j2mewtk的例子,侧重于图形方面,例子比较大,复杂,难看懂。
lib:空,不知道放什么东西。
tmplib:空,不知道放什么东西。
uidemo:存放j2mewtk的例子,侧重于用户界面设计方面。例子不大,难度中等。
fancy:这个文件夹原来是没有的,当我们创建fancy项目的时候,j2mewtk自动为我们创建的文
件夹。
进入fancy文件夹,它里面又有很多子文件夹,如下所示:
bin:存放项目的打包输出文件。
classes:存放编译器产生的class文件。
lib:空,不知道有什么用。
res:存放资源文件,例如项目中用到的图片。
src:存放项目的源代码。
tmpclasses:存放编译器产生的class文件,是classes文件夹的镜像。
tmplib:空,不知道有什么用,是lib文件夹的镜像。

(8)——-helloworld!
现在该是使用j2me说hello world的时候了。选择你最喜欢的文本编辑器,例如editplus,
输入下面的代码:
package fancy.test;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class helloworld extends midlet implements commandlistener
{
private display display;
private form props;

private command exitcommand = new command("exit", command.exit, 1);

public helloworld()
{
display = display.getdisplay(this);
}

public void startapp()
{
props = new form("hello world");
props.append("hello world!\n");

props.addcommand(exitcommand);
props.setcommandlistener(this);
display.setcurrent(props);
}

public void commandaction(command c, displayable s)
{
if (c == exitcommand)
{
destroyapp(false);
notifydestroyed();
}
}

public void destroyapp(boolean unconditional)
{
}

public void pauseapp()
{
display.setcurrent(null);
props = null;
}

}
然后将该文件保存在j2mewtk_home\apps\fancy\src\fancy\test目录下面,文件名为hello
world.java。注意:你需要在fancy\src目录下面创建fancy文件夹,然后再在fancy文件夹下面
创建test文件夹。最后才保存helloworld.java文件。
现在转到j2mewtk的主窗口,单击build按钮,编译整个项目,查看控制台的输出信息,一切无
误,再单击run按钮,运行此程序。运行效果如下图所示:(缺)

(9)——-helloworld解释一
要停电了,只好写道这里了。
1) package fancy.test;
这行代码声明当前类所在的包。这是有必要的。而且这个包名必须和src文件夹中的目录结
构对应。

2)
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
这两行代码导入必要的java包,这两个包的作用在后面会提及,这里就不多说了。

3)
public class helloworld extends midlet implements commandlistener
j2me程序一般应该继承midlet,实现commandlistener。就如applet必须继承applet,可能实
现runnable接口一样。

4)
private display display;
private form props;
定义两个私有对象,display代表屏幕,显示区域。form是容器的一种。在j2me程序中,不但
有容器的概念,还有画布(canvas)的概念。这个程序在form容器中显示文本。

5)
private command exitcommand = new command("exit", command.exit, 1);
声明一个command对象。j2me的事件处理机制和j2se的事件处理机制不太一样。在j2me程序
中,必须预先定义一些command对象,注册到程序中。当设备发生了某个事件,会产生相应的co
mmand对象,并把它传递给一个事件处理函数—-commandaction(),由它对所产生的事件做统
筹处理。

6)
public helloworld()
{
display = display.getdisplay(this);
}
这个是构造函数,函数内部,调用display对象的静态方法—getdisplay(),获取屏幕对象,
实例化display变量。这个调用是必要的。你可以在构造函数中做这个工作,也可以在startapp()
方法中做这个工作。推荐在构造函数中完成。

7)midlet程序的运行流程
构造函数—->startapp()——>侦听事件,接受命令——->commandaction()方法—-
—>调用别的方法———–>如果是exit命令———>pauseapp()———>destroyapp()方法。
实际上midlet程序的运行流程和applet程序的运行流程差不多。

public void startapp()
{
props = new form("hello world");
props.append("hello world!\n");

props.addcommand(exitcommand);
props.setcommandlistener(this);
display.setcurrent(props);
}
这是startapp()方法。这个方法是父类的抽象方法,在子类中必须予以覆盖。首先实例化form对象
———-props,form的构造函数的参数(hello world)就是屏幕的标题。form对象
是一容器,在里面可以包含别的东西,props.append(“…..”);的作用就是在这个容器中存放
一个字符串。这个字符串会在屏幕中显示出来。
接下来的三行代码分别做这样的工作:
将exit命令注册到form对象(props)中,这样form对象(props)可以对该命令作出响应。
设置form对象(props)的命令监听者。
将form对象设置为屏幕显示的对象。
你可以试着注释掉这三行代码,再编译运行这个程序,看看会发生什么情况。

9)
public void commandaction(command c, displayable s)
{
if (c == exitcommand)
{
destroyapp(false);
notifydestroyed();
}
}
这个方法是事件处理的中枢,它接受各种命令,并对其进行分析,再分别调用合适的处理方法。
在这个例子中,当接收到exit命令以后,马上销毁程序,退出。

10)destroyapp()方法的作用是退出程序并销毁程序对象。pauseapp()方法的作用是暂停程序
,并销毁容器对象或者是画布对象。手机屏幕将会是一片空白。

(11)——j2me的类库结构
javax.microedition.lcdui:用户界面包,主要用于构造程序的用户界面。command、form都
是这个包的类。
javax.microedition.rms:这个包实现了对手机数据的存取功能。
javax.microedition.midlet:这个包是midlet程序的声明周期包,主要定义了midlet类,midlet
类是一个抽象类,里面声明了startapp()、destroyapp()、pauseapp()等抽象方法。
javax.microedition.io:网络io包。有httpconnection接口和connection接口、datagram接口。
java.io.*
java.lang.*
java.util.*
上面这三个包属于j2me核心包,j2me中的核心包和j2se中的同名核心包有些差别,主要是功能
大大简化了,许多类、方法都没有了,只能实现一些最基本的功能。

————————————————————————————
网易广州社区java版

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » J2ME学习札记 1-11-JSP教程,资料/其它
分享到: 更多 (0)

相关推荐

  • 暂无文章