分享
 
 
 

开发一个简单的KJava应用程序示例

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

无论学习什么新事物,都讲究循序渐进。学习J2ME也不例外,在此我想先介绍一下使用J2ME开发Palm上的一个小的应用程序,再深入探讨开发更加复杂的应用程序,好,那我么就开始吧。

第一 获得 J2ME

你可以从Sun网站上下载到 J2ME CLDC文件。第一个文件是 j2me_cldc_-1_0-src.winsol.zip,它包括所有开发 CLDC应用程序时需要的类库。除了包括类库以外,它还包括源代码以及 Windows和 UNIX下的可执行代码,用于 MIDP规定的 Java虚拟机引用实现。看了前几篇文章的读者肯定都知道,这里提到的Java虚拟机就是 K虚拟机 ( KVM ),有了这个文件,在开发过程中,你就可以在个人电脑上调试程序,而不用把这些程序下载到你的手持设备上。

第二个文件是 j2me_cldc-1_0-src-palm_overlay.zip,它包括一个用于运行 Palm操作系统的设备的 KVM的实现,以及把.class文件通过一个 Java编译程序生成可执行 Palm文件的工具。注重,这是一个用于 Palm操作系统的 CLDC个别实现。假如使用针对其它的设备的实现的话,你的 Java应用程序也可以在其他设备上运行。

为了开发用于 Palm OS设备的应用程序,你必需在你的计算机上安装这两个Zip文件。在本文中,我假设你已经在 C盘中安装了 CLDC文件夹。注重,为了开发 CLDC应用程序,你并不需要一个特定的 Java编译程序。你可以使用 J2SE带有的编译程序,唯一的差别就是,你必须在编译的时候更换成J2ME类库所在的路径。你还要使用下载到的 CLDC中带有的特定软件来处理生成的 .class文件。

第二 运行文档附带的应用程序示例

你从Sun网站上下载的文件中包含了许多示例应用程序的源程序以及编译好的版本,你可以在你的台式机上,使用 KVM来运行这些示例应用程序。运行这些应用程序可以使你对一个 CLDC应用程序有一个感性熟悉。在运行这些程序之前,你必要启动一个命令行界面,然后输入下列命令:

set cldc_classpath = c:;.

set bin = %bin%;c:

cd

好,现在你已经设置了环境变量并进入了保存示例应用程序的目录,你就可以开始运行它们了。比如说,为了运行 UITest程序,输入:kvm -classpath %cldc_classpath% UITest

你也可以看看 Pong这个游戏程序,请在命令行输入下面的命令:kvm -classpath %cldc_classpath% Pong

是不是挺好玩,你可以试一试运行每个示例应用程序,稍后,我们还要使用相同的方法来运行我们在台式机中开发的应用程序。第三节 构建一个 Palm应用程序

好,现在你对 J2ME的程序有一点感性熟悉了吧?现在让我们做一些实事吧,我将介绍如何构建一个 运行于 Palm OS设备上的 Java应用程序。首先,虽然J2ME是Java技术,但这并非意谓着你可以使用现有的 Java应用程序,重新编译它们然后把它们运行于新的设备上。在前面几章中我已经谈过,J2SE和J2EE使用的Java虚拟机中的许多要害特性已经从J2ME虚拟机中删除了,因为设备的资源有限。

J2ME带的 Java虚拟机(KVM)缺乏浮点数支持;J2ME应用程序与 J2SE、 J2EE应用程序的另外一个重要的差别是缺乏优先型多任务,虽然它不是 Java规范中所述的必要条件,但是几乎你的 J2SE、 J2EE应用程序运行的所有机器都支持优先型多任务。这意味着 CPU在多个 Java线程之间共享而不必在你的程序中添加任何非凡的代码,而 J2ME使用的设备则往往没有这种功能,为了确保多线程能够工作,你必须调用 Thread.yield()方法。

使用 CLDC简表的另一个值得注重的方面是J2ME类库缺少许多 J2SE类库中的类。在构建应用程序时,必须使用这有限制的类库。当你下载到CLDC文件时,你可以仔细考察你获得的文件,弄清楚哪一个类包含在CLDC规范中。你必须对付的最后一个问题是 CLDC类库内部缺少访问用户界面元素--按钮、菜单、图形。不使用 Palm的用户界面,就不大可能为 Palm OS设备开发应用程序, Sun已经解决了这个问题--使用一个单独的类库 com.sun.kjava来提供给你访问基层 Palm用户界面的权限。下面这个示例程序就使用类库创建窗口、按钮和对话框。不过请注重,kjava类库既不是 MIDP配置也不是 CLDC简表的官方部分,它很有可能在未来的版本中改变或消失。这就意味着你使用 kjava类库写的任何程序,一旦发行新的J2ME版本你就不得不修改这个程序以适应新的J2ME版本。但是现在,它还是你开发使用Palm用户界面的应用程序的唯一选择。

import lang.*;

import com.sun.kjava.*;

public class HelloWorld extends Spotlet

implements DialogOwner {

private Button quitButton;

private Button aboutButton;

private TextBox welcomeTextBox;

private final String welcomeString = "Hello World ";

private final String aboutTitleString = "About Hello World";

private final String aboutString = "HelloWorld J2ME CLDC Application";

public HelloWorld() {

register(WANT_SYSTEM_KEYS);

welcomeTextBox = new TextBox(welcomeString, 10, 10, 140, 130);

aboutButton = new Button("About", 75, 140);

aboutButton.setEnabled(true);

quitButton = new Button("Quit", 125, 140);

quitButton.setEnabled(true);

paint();

}

public void dialogDismissed(String title) {

Graphics.clearScreen();

register(WANT_SYSTEM_KEYS);

paint();

}

public void paint() {

welcomeTextBox.paint();

aboutButton.paint();

quitButton.paint();

}

public void penDown(int x, int y) {

if (aboutButton.pressed(x, y)) {

Dialog aboutDialog =

new Dialog(this, aboutTitleString, aboutString, "OK");

aboutDialog.showDialog();

}

if (quitButton.pressed(x, y))

System.exit(0);

}

public static void main(String args[]) {

new HelloWorld();

}

}

分析HelloWorld应用程序

上面的这个HelloWorld应用程序具有运行 Palm OS的设备上的 CLDC应用程序的基本特征。当你仔细考察一下这段代码,你会发现许多使用 kjava类库编译应用程序的特性。首先,这个程序扩展了 com.sun.kjava.spotlet类,使用 kjava,一个 spotlet就是任何可以得到焦点(focus)的类,那就是说,从系统中接收事件,比如手写笔的点触。在我们的例子中, 当手写笔点击About和Quit按钮时,HelloWorld应用程序需要响应,因此它需要获得焦点。你的应用程序可以包括任意多的从 spotlet中衍生的类,虽然在任何时间它们中间只有一个能够取得焦点。实际上,应用程序通过调用 register方法使用焦点,我们在 HelloWorld构造程序开始的部分和 dialogDismissed方法中都用了 register。HelloWorld类实现了 DialogOwner接口。实现 DailogOwner接口的类是用于创建对话框的类。我们的应用程序创建了一个对话框来响应手写笔点击 About按钮的事件,为了实现DialogOwner接口,你的类必须包含一个dialogDismissed成员方法,为了实现 DialogOwner接口,你的类必须包含一个 dialogDismissed成员方法,这个方法在一个对话框被关闭的时间被调用。

HelloWorld构造程序在屏幕上创建三个界面元素:一个文本框和两个按钮。你马上就会发现 kjava和 J2SE AWT的一个重要的差别: kjava没有与 AWT自动布局机制等价的东西。你必须自己编码确定每个界面元素在屏幕上的位置。在我们的程序中,我们把文本框放在(10,10)和(140,130)之间;两个按钮放置在( 75,140)和(125,140)。

每当用户在装置上轻点手写笔时,都要调用HelloWorld的 penDown方法。我们通过调用每个按钮的 pressed方法确定这次点击是否发生在按钮的边界以内,假如按钮的pressed方法返回一个真值,意味着手写笔点击事件发生在按钮边界之内,这个按钮相对应的动作将发生。比如说假如点击了 About按钮,我们通过创建一个新的 Dialog对象创建 About对话框。要是点击了 Quit按钮,我们就终止这个程序。

最后, 当用户关闭对话框时,要调用 HelloWorld的 dialogDismissed方法。在我们的应用程序中,这个方法做的事情就是通过调用 register方法恢复焦点并调用 paint方法来刷新屏幕。

编译

编译一个 CLDC应用程序需要两步操作:首先你必须通过标准的 J2SE编译程序运行它们,不过使用 CLDC类库代替标准的 J2SE类库。然后,使用preverify程序把得到的.class文件转化成 KVM可读的 Java应用程序。

上面的示例程序如下面这样编译:

javac -g:none -classpath %cldc_classpath% -d %temp% HelloWorld.java

preverify -classpath %cldc_classpath% -s %temp% -d .

一旦编译好后,就可以使用下面的命令来在你的台式机上运行这个程序:

kvm -classpath %cldc_classpath% HelloWorld

既然这个CLDC应用程序在计算机上可以运行,那么你也可以试着把它转换成Palm可执行文件。

在Palm上运行

为了把一个使用CLDC开发的.class文件转换成在Palm OS设备上可实际运行的文件,你需要使用j2me_cldc-1_0-src-palm_overlay.zip中的许多程序。首先,你必须把你的 .class文件转换成 Palm OS应用程序,所有的 Palm OS应用程序都有扩展名 .prc。通过使用

palm.database.MakePalmApp类把 .class文件转化成 .prc文件,使用下面这个命令行运行我们刚才写好的 HelloWorld.class文件:

java palm.database.MakePalmApp -bootclasspath %cldc_classpath% HelloWorld

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有