- UID
- 872238
|
最后, onEvent方法进行事件处理:首先,这个事件对象本身被查询,以确定事件类型。在本例中我们想知道它是否是一个 PRESSED事件。(其他类型包含 FOCUS_IN、 FOCUS_OUT、 TIMER和 WINDOW_CLOSED )。这些都定义在 ControlEvent类中,是扩展事件。如果这个事件和我们要寻找的事件类型匹配,然后我们就可以确定激活事件的对象。在我们的 ContactManager应用程序中,我们只有要响应按钮按下的动作。所以如果用户轻点按钮激活事件,然后我们就可以执行代码来查寻目录中的姓名。
定义在 MainWindow类中的其他有用的方法是 onStart和 onExit。onStart方法可能包括初始化代码;它在构造程序完成之后被调用。应用程序退出先要调用onExit方法,这时可以执行必要的清理工作比如写入未保存的数据。
编译应用程序
一个应用程序要在 Palm OS中运行,就要把 Waba类文件编译成.prc文件,你需要调用 Waba带的两个程序: warp和 exegen。这两个文件都可以在WABA安装目录下的 bin目录下找到。warp程序创建一个 WRP文件和一个 PDB文件。WRP文件对一个 Palm设备来说没有用,但是我曾在第一篇文章中提起过, Waba也可以运行于 Windows CE, WRP文件就用于此处。Warp程序将为 PDB文件产生一个默认的 creatorID,但是可以用 /c选项自己指定一个creatorID。这个创建者表示号是一个四字节的标识符,是 Palm OS使用来把应用程序和数据联系在一起的。如果你发布的是一个商业应用程序,最好使用唯一creatorID,这样你的应用程序和数据就不会和别人开发的其它应用程序有冲突,你还可以在 PalmOS网站上注册一个 creatorID。
下列命令可以从我们的 ContactManager类中创建一个 pdb文件。
warp c /c cnTc ContactManager *.class |
第一个 c告诉 warp创建 PDB文件,另一个标志是l, 用于列出PDB文件的内容。另外一个标志是 L,用于列出 PDB文件的内容。/c设置cnTc为与 PDB文件关联的 creatorID。下一个参数是 PDB文件将要调用的内容,在本例中,是 ContactManager。最后必要的类文件也应包括在 PDB文件中。我们的 ContactManager应用程序只有一个类,因此没有必要规定通配符。可是如果这个应用程序有许多类,这个语法就能添加所有的类到PDB文件中去。
为了使你的应用程序在 Palm OS上可以执行,你还需要运行Exegen程序。这将创建一个PRC文件,它把你的应用程序的切入点提供给 Palm OS,Exegen命令行参数看上去像下面列出这样:
Exegen [options] exefile main-window-class warpfile [warpfile2...] |
对于我们的 ContactManager应用程序,我们应运行:
Exegen ContactManager ContactManager ContactManager |
这条命令规定, PRC文件名将为 ContactManager,我们扩展 waba.ui.MainWindow类得来的类称作 ContactManager以及 warp文件包括我们的类被称作 ContactManager。可见,我们必须先运行warp程序然后再运行 Exegen。
这些操作都完成后,我们将得到一个PDB文件和一个PRC,你可以把它们上传到 Palm设备中,但是也可以在 Palm OS模拟器中测试。Palm OS模拟器,简称 POSE,是一个推荐工具,有助于编译-改编-运行的整个环节。在模拟器中运行应用程序比在真正的设备中运行要简单多了,所以在调试阶段一般都使用模拟器。
当然在你运行这个应用程序之前,你必需先下载 Waba虚拟机,下载 waba.prc和 waba.pdb文件。
用于规定 Exegen的其他选项列于下表:
/h | 指定应用程序主窗口的高度 | /i | 指定 PalmOS PRC图标 (例如:/i sample.bmp) | /l | 指定类堆栈的大小 (例如:/l 10000) | /m | 指定对象堆栈的大小 (例如:/m 20000) | /p | WindowsCE下包含 warp文件的目录的全称路径 | /s | 指定堆积的大小 (例如:/s 2000) | /t | 指定本地堆积的大小 (例如:/t 50) | /w | 指定应用程序主窗口的宽度 |
可见,有好几个选项允许你优化应用程序使用的内存。根据经验,这些选项使用的好坏,可以产生很大的差异。例如,如果没有足够大的类堆栈,键盘就不会显示,而且抛出一个异常。
我们可以把我们刚才那个 exegen命令稍稍改一改,如下: |
|