3.1 AWT类库的安装和配置
对 嵌入式Java比较熟悉的朋友一定知道目前大多数的嵌入式虚拟机都提供了对AWT 的支持。例如Sun公司开发的Personal Java,Insignia公司开发的Jeode,Nsicom公司开发的CrEme,还有PERC公司开发的Perc,当然还包括我们正在介绍的IBM J9。就我个人所了解的情况,Nsicom公司开发的CrEme 是目前唯一的一个支持Swing 的嵌入式Java虚拟机。关于为什么在嵌入式Java中普遍使用AWT而不使用Swing的问题,我们会在这一章的第三节进行讨论。
根 据我们在2.3 节中的介绍,J9虚拟机在jclPersonal 标准类库中提供了对AWT的支持,但是在QNX的缺省安装中并不包括这个类库。因此,我们需要从J9虚拟机的新家WebSphere Studio Device Developer (也就是原先叫做Visual Age for Java Micro Edition的)中获得这个类库。
首 先我们必须从IBM 的网站下载WebSphere Studio Device Developer,下载的地址是www.ibm.com/software/ad/embedded/。这是IBM公司基于 Eclipse开发的嵌入式Java集成开发环境,如果你以前用过Visual Age for Java或者是Eclipse的其它版本的话,想来应该很容易的就能够上手。WSDD有两个版本,一个是给Windows平台的,另外一个是给Linux 平台的。但是在这个标准版的WSDD中既不包括QNX平台的运行环境,也不包括我们所需要的jclPersonal 类库,所以我们还要下载WSDD的Software Updates。QNX 平台的运行环境在Runtime Software Updates中,jclPersonal库在Custom Environment Software Updates中,所以这两个update我们都要下载。
首 先安装WSDD,将下载来的Software Updates解压到一个临时目录下,然后启动WSDD。从主菜单选取Help -> Device Developer Updates。点击Add或者是Update All,在随后跳出来的对话框里面选Local Predefined Locations。在最下面的Location一栏里面填上你所需要安装的Update,格式为file:/$dir,例如:
file:/c:/temp/wsddupdates/wsdd/4.0/runtimes/
file:/c:/temp/wsddupdates/wsdd/4.0/wce/
安装结束以后在下面这个目录找到QNX 的jclPersonal类库prsnlqnx.jar:
wsdd/wsdd4.0/ive/runtimes/qnx/common/ive/lib/jclMax/
如 果你的QNX 和Windows或者是Linux主机是两台独立的计算机的话,你可以通过网络或者是其它的可移动存储设备将prsnlqnx.jar拷贝到你的 QNX 系统上。如果你的QNX 和晕倒死或者是利怒死主机是安装的同一台计算机的不同硬盘或者是同一块硬盘的不同分区上的话,你可以启动QNX 进入文件管理器,然后进入/fs目录看看里面是不是能够看见其它的硬盘或者是分区。如果没有看到你所需要的硬盘或者是分区,你可以使用mount命令启用 相对应的硬盘或者是分区,使得你可以从QNX 系统下对这些硬盘或者是分区上面的文件进行操作。
将prsnlqnx.jar文件放到/usr/eclipse/ive/lib目录下,然后修改类路径,最好是在~/.profile文件里面改:
export CLASSPATH=$CLASSPATH:/usr/eclipse/ive/lib/prsnlqnx.jar
到目前为止,我们已经完成了AWT类库的安装和配置。
3.2 一个简单的AWT图形用户界面
AWT是Java语言中构建图形用户界面的标准。由于Java语言卓越的跨平台特性,在一个平台上编写的基于AWT的图形用户界面可以不加修改的直接移植到另外一个平台上使用。通常来说,构建一个基于AWT的图形用户界面需要经过如下步骤:
(1) 创建一个顶级容器对象,例如Window或者是Frame。
(2) 在顶级容器对象上面创建用户所需要的控件。
(3) 初始化所有的控件,包括大小和初始值等,为控件的事件注册必要的监听器Listener。
(4) 打开主窗口。
下面是一个简单的基于AWT的图形用户界面:
|
使用下面的命令编译以上例程:
#j9c -classpath $CLASSPATH HelloAwt.java
使用下面的命令运行以上例程:
#j9 HelloAwt
在Sun 公司撰写的Java入门教程The Java Tutorial中有专门的一章介绍了基于AWT 的图形用户界面。但是由于目前Swing已经正式成为标准版Java2 中构建图形用户界面的标准,这一章的内容被Sun 公司从The Java Tutorial网站上撤下,但是各位读者仍然可以从Sun 公司的网站下载这部分的教程:
http://java.sun.com/docs/books/tutorial/information/download.html#OLDui
3.3 关于AWT和Swing的一点讨论
在 第一节中我们提到了目前大多数的嵌入式Java虚拟机都提供了对AWT 的支持但是不提供对Swing 的支持。但是,在标准版的Java平台上Swing 才是推荐使用的图形界面系统,在Sun 公司所提供的Java Tutorial 中甚至把基于AWT 的图形用户界面设计这一部份从其网站中删除,需要利用到AWT 进行图形用户界面设计的用户只有将该部份下载到本地硬盘才能够使用这部份教程。在标准版Java中正值春风得意的Swing 为什么到了嵌入式应用中便不再吃香了呢?
AWT 是Abstract Window ToolKit (抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口。AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系,我们把它称为peers。 也就是说,当我们利用 AWT 来构件图形用户界面的时候,我们实际上是在利用操作系统所提供的图形库。由于不同操作系统的图形库所提供的功能是不一样的,在一个平台上存在的功能在另外 一个平台上则可能不存在。为了实现Java语言所宣称的"一次编译,到处运行"的概念,AWT 不得不通过牺牲功能来实现其平台无关性,也就是说,AWT 所提供的图形功能是各种通用型操作系统所提供的图形功能的交集。由于AWT 是依靠本地方法来实现其功能的,我们通常把AWT控件称为重量级控件。
Swing 是在AWT的基础上构建的一套新的图形界面系统,它提供了AWT 所能够提供的所有功能,并且用纯粹的Java代码对AWT 的功能进行了大幅度的扩充。例如说并不是所有的操作系统都提供了对树形控件的支持, Swing 利用了AWT 中所提供的基本作图方法对树形控件进行模拟。由于 Swing 控件是用100%的Java代码来实现的,因此在一个平台上设计的树形控件可以在其他平台上使用。由于在Swing 中没有使用本地方法来实现图形功能,我们通常把Swing控件称为轻量级控件。
说 到这里我想各位读者应该明白了AWT和Swing之间的基本区别:AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing是基于AWT 的Java程序,其运行速度比较慢。对于一个嵌入式应用来说,目标平台的硬件资源往往非常有限,而应用程序的运行速度又是项目中至关重要的因素。在这种矛 盾的情况下,简单而高效的AWT 当然成了嵌入式Java的第一选择。而在普通的基于PC或者是工作站的标准Java应用中,硬件资源对应用程序所造成的限制往往不是项目中的关键因素,所 以在标准版的Java中则提倡使用Swing, 也就是通过牺牲速度来实现应用程序的功能。
你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=5995551