personal java 程序设计 - pudn.comread.pudn.com/downloads4/ebook/15014/pjava_3_sc.pdf ·...

Post on 20-Apr-2020

44 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Personal Java 程序设计(三) - Symbian OS Java 程序设计入门

by 王森

Sun Microsystems 教育训练中心 moli0205@mail2000.com.tw

引言 您想用 Java 来设计手机与 PDA 的应用程序,可是嫌 J2ME MIDP 功能太

少,无法让您尽情发挥吗? 笔者建议您试试 Personal Java。Personal 可以让

您设计的 Java 程序得以在以 Windows CE 与 Symbian OS 为操作系统的机器

上执行,包括市面上已经可以买到的 PocketPC、Nokia 9210c、SonyEricsson P800 都是 Personal Java 可以发挥的范围。

前言 本文将教导如何开发 Symbian 应用程序,Crystal 版的部份,我们采用

Nokia 9210 SDK(中文版/英文版),Quartz(Symbian OS 7.0 之后又称为 UIQ)的部分,则采用 SonyEricsson P800 SDK。 本文将专注于基本开发流程与环境设定的探讨,比较深入的程序开发则留待

后面文章。

Symbian OS Crystal 版 SDK 的下载

在撰写本文时,唯一一台使用 Symbian OS Crystal 版的手机只有 Nokia 9210(台湾的型号为 Nokia 9210c,已上市)。 图: Nokia 9210c

请注意: 本文中出现之 Java 程序代码,已在 Java 2 SDK 1.4.x 完成测试。所使用的

Ant 版本为最新的 1.5 版。本文所有操作皆在 Windows 2000 Professional与 XP Professional 中文版操作系统上经过测试。如果您使用的是 Windows其它版本,我们无法保证会有相同的结果,但基本上应该没有什么太大问题。

2

所以要下载 Symbian OS Crystal 版的 SDK,就须到 Forum Nokia 下载。请开

启浏览器,连接至 Forum Nokia 官方网站(http://www.forum.nokia.com/): 图: Forum Nokia 官方网站

请先注册成为 Forum Nokia 的会员(免费),并使用屏幕右上角的功能进行

登入。然后选择”Tools and SDKs”以进入工具下载区。 图: Forum Nokia 官方开发工具下载区

3

图: Symbian OS Crystal SDK v6.x 官方开发工具下载网页

4

请注意,Nokia 9210 SDK 有支持繁体中文的版本。

Symbian OS Quartz 版 SDK 的下载

在撰写本文时,唯一一台使用 Symbian OS Quartz 版的手机只有 Sony Ericsson P800/P802。 图: Sony Ericsson P800

5

请至 Symbian 官方网站(http://www.symbian.com/): 图: Symbian 官方网站

6

选择上方的”Developer”以进入程序开发者专属网页。 图: Symbian 程序开发者专属网页

7

选择中间的”UIQ Java SDK for Symbian”以进入 UIQ Java SDK 下载网页。 图: UIQ Java SDK 下载网页

8

请移到此网页最下方,选择下载 Symbian OS Quartz SDK v6.x。

9

图: Symbian OS Quartz SDK v6.x 下载前注册网页

10

请填妥所需要的数据,在”Which SDKs dos you require?”处选择 Quartz v6.x C++ and Java,最后按下”Submit Form”即可。接着会出现画面: 图: Symbian OS Quartz SDK 下载注册确认网页

11

系统会将您的 ID 与密码寄到您指定的 e-mail 信箱中。如果您收到了,请点选网

页最底下的”here”(http://www3.symbian.com/dl-sdk.nsf)进行下载工作。 图: 下载 Symbian OS Quartz SDK 前的登录画面

图: 下载 Symbian OS Quartz SDK 下载网页

12

点选”SDK: Quartz(C++ and Java) v6.1”的连结,就可进行最后的下载工作。

SonyEricsson P800 SDK 的下载

请到 http://www.sonyericsson.com/spg.jsp?template=frameset_dev_zone 或 http://www.ericsson.com/mobilityworld/sub/open/technologies/epoc/

13

tools/7_uiq 进行下载。

准备事项 Symbian OS 相关 SDK 需要 JDK 与 Perl 的辅助,请在安装 Symbian OS相关 SDK 之前,确认您的计算机上已安装了 JDK 与 ActivePerl。 Tips 仿真器可以帮我们模拟画面,TCP/IP 或 RS232 连结,可以并无法帮我们完全

模拟手机上的情形,例如 DTMF 拨号控制等。 由于 Personal Java 支持 JNI,如果您有用到 JNI,那么必须额外安装 C++版的 SDK

安装 Nokia 9210 SDK 安装时,由于我们已经安装了ActivePerl与新版的JDK,所以请反勾选Java Install。

14

底下我们假设 SDK 安装于 D:\Symbian\6.0\NokiaJava 目录之中,而 SDK 的

共享档案(C++ SDK 与 Java SDK 共享)则安装在 D:\Symbian\6.0\Shared 目

录底下。

完成安装之后,重新开机即可。

安装 SonyEricsson P800 SDK

15

底下我们皆假设 SonyEricsson P800 SDK 安装在 d:\Symbian\UIQ_70 幕

路底下:

安装时,由于我们已经安装了 ActivePerl 与新版的 JDK,所以安装程序会

自动帮我们侦测。

请选择安装 UIQ Personal Java SDK、Document、、UIQ MIDP SDK 以及

Example projects 即可。

16

完成安装之后,不需重新开机就可以直接进行开发

Nokia 9210 SDK 开发环境 安装完成之后,Nokia 9210 SDK 会自动帮我们加入一个名为 EPOCROOT的环境变量。

17

另外,开始菜单之中会加入一些功能选项,分别在「开始菜单| Programs」

与「开始菜单| 程序集 | Symbian 6.0 SDKs」底下。 Tips 如果您安装的是 Nokia 9210 SDK(中文版/英文版),您会发现在「开始菜单| 程序集 | Symbian 6.0 SDKs | Development tools」之下的工具联结都是有错

的,这些工具的连结其实在「开始菜单| Programs」也有一个。如果您希望

连结是正确的,请修改如下: 底下以 AIF Builder 为例,原本的联结是: “D:\Symbian\6.0\Shared\ splash.exe "aifbuilder\aifbuilder.jar" 请改成 D:\Symbian\6.0\Shared\EPOC32\Tools\splash.exe "aifbuilder\aifbuilder.jar" 即可。

SonyEricsson P800 SDK 开发环境 SonyEricsson P800 SDK 不会在开始菜单之中安装任何选项。 您会发现在<SDK 安装目录>\Documentation 之下的 AppletFrame.html

用到 Applet,而且用过 HTMLConverter 转换,导致非得 JDK 1.3.1_01 的 JRE才能执行。为了解决此问题,请将 AppletFrame.html 的内容改成

AppletFrame.html

18

<HTML>

<HEAD>

<TITLE>Help Example</TITLE>

</HEAD>

<applet code="com.symbian.sdk.docplugintool.CDocPlugInTool.class"

archive="docplugintool.jar, support/lucene.jar, support/xerces.jar,

support/HTMLParser.jar, support/ShellExec.jar"

width=170 height=150>

</BODY>

</HTML> 即可。这是因为 JDK 1.4.x 之后的 JRE 已经不需要 HTMLConverter 就能执行

Applet。

Nokia 9210 SDK 重要目录 Symbian OS Crystal 仿真器放置在 除错版 <SDK 安装目录>\Epoc32\Release\wins\udeb\Epoc.exe 发行版 <SDK 安装目录>\Epoc32\Release\wins\urel\Epoc.exe Personal Java 仿真器放置在 除错版 <SDK 安装目录>\Epoc32\Release\wins\udeb\pjava_g.exe 发行版 <SDK 安装目录>\Epoc32\Release\wins\urel\pjava.exe Tips 如果您安装的是 Nokia 9210 中文版 SDK,则只能看到除错版的仿真器和

Personal Java 仿真器。 仿真器执行画面:

另外,<SDK 安装目录>\erj 在仿真器之中被模拟成 J:磁盘驱动器,以方便测试,

19

<SDK 安装目录>\erj\lib 放置了 Personal Java 在执行时期所需要的设定和核

心函式库(font.properties、classes.zip 等)。<SDK 安装目录>\erj\ext 则放置

了 Personal Java在执行时期所需要的扩充函式库(cawt.jar、javaphone.jar)。在开发时期,我们的程序都要放置在<SDK 安装目录>\erj 底下,才能进行测试,

否则仿真器将无法定位到我们所写的 Java 程序。 Tips 实机上并没有,cawt.jar 这个函式库,您可以到 Nokia 网站

http://www.forum.nokia.com/javaforum/main/1,35452,1_0_30_20,00.html 下载 cawtjar.sis,或者到 <SDK 安装目录>\erj\utilities\awt 底下找到 cawt.jar,将他复制到实机上的

Communicator\System\Java\ext 目录底下。 另外,<SDK 安装目录>\erj\tools 底下还有两个工具,分别是 AViewer 和Redirect,将他们安装在实机中可以帮助我们程序的开发。

SonyEricsson P800 SDK 重要目录 Symbian OS UIQ 仿真器放置在 除错版 <SDK 安装目录>\epoc32\release\winscw\udeb\Epoc.exe 发行版 <SDK 安装目录>\epoc32\release\winscw\urel\Epoc.exe Personal Java 仿真器放置在 除错版 <SDK 安装目录>\epoc32\release\winscw\udeb\pjava_g.exe 发行版 <SDK 安装目录>\epoc32\release\winscw\urel\pjava.exe <SDK 安装目录>\epoc32\java\lib 放置了 Personal Java 在执行时期所需要

的设定和核心函式库(font.properties、classes.zip 等)。 <SDK安装目录>\epoc32\java\ext则放置了Personal Java在执行时期所需

要的扩充函式库(qawt.jar、util.jar、javaphone.jar)。

20

Tips 注意,qawt.jar 与 util.jar 预设并没有放置在 <SDK 安装目录>\epoc32\java\ext 底下,请到 <SDK 安装目录>\epoc32\etj\Ext 目录下,将这两个档案复制到 <SDK 安装目录>\epoc32\java\ext 底下 在使用 UIQ SDK 之前,请先设定 _epoc_drive_j 环境变量,使他映像到<SDK安装目录>\epoc32\java\,

在开发时期,我们的程序都要放置 _epoc_drive_j 环境变量所对应的目录底

下,才能进行测试,否则仿真器将无法定位到我们所写的 Java 程序。 Tips 实机上并没有,qawt.jar 与 util.jar 这两个函式库, <SDK 安装目录>\erj\utilities\Awt\arm 底下找到 QAWT.sis <SDK 安装目录>\erj\utilities\util\arm 底下找到 QUtil.sis 将他们安装在实机中。

Nokia 9210 SDK 开发入门 我们将以前面章节的范例做基础,修改 build.properties 与 build.xml 如下:

build.properties #此文件用来设定一些常用属性

#专案名称

name=crystalapp

#合成后 JAR 的檔名

jar=${name}.jar

#原始文件所在路径

src.dir=src

#资源文件所在路径

res.dir=res

21

#建构产物置放位置

build.dir=build

#编译后类别文件的放置位置

build.dir.classes=${build.dir}/classes

#JAR 的最终放置位置

build.dir.bin=${build.dir}/bin

#未经过混淆的 JAR 檔名

build.dir.bin.jarunobfus=${build.dir.bin}/${name}-unobfus.jar

#经过混淆的 JAR 檔名

build.dir.bin.jar=${build.dir.bin}/${jar}

#Symbian SDK 所在路径

symbian.home=d:/Symbian/6.0/NokiaJava

#Symbian 相关 Java Library

symbian.home.erj=${symbian.home}/erj

symbian.lib.core=${symbian.home}/erj/lib/classes.zip

symbian.lib.cawt=${symbian.home}/erj/ext/cawt.jar

symbian.lib.javaphone=${symbian.home}/erj/ext/javaphone.jar

#Symbian 仿真器

symbian.emu.dbg=${symbian.home}/Epoc32/Release/wins/udeb/Epoc.exe

symbian.emu.rel=${symbian.home}/Epoc32/Release/wins/urel/Epoc.exe

symbian.pjava.dbg=${symbian.home}/Epoc32/Release/wins/udeb/pjava_g.exe

symbian.pjava.rel=${symbian.home}/Epoc32/Release/wins/urel/pjava.exe

#混淆器与控制档

obfuscator.lib=retroguard.jar

obfuscator.script=script.rgs

build.xml

<?xml version="1.0" encoding="Big5"?>

<project name="Symbian Crystal 入门" default="all" basedir=".">

<!-- 引入位于 build.properties 之中的常用属性 -->

<property file="build.properties"/>

<target name="prepare" description="准备工作">

<mkdir dir="${build.dir}"/>

<mkdir dir="${build.dir.classes}"/>

22

</target>

<target name="cleandir" description="清除目录">

<delete dir="${build.dir}"/>

</target>

<target name="compile" description="编译原始码" depends="prepare">

<javac debug="off"

bootclasspath="${symbian.lib.core}"

classpath="${symbian.lib.cawt};${symbian.lib.javaphone}"

srcdir="${src.dir}"

destdir="${build.dir.classes}"

target="1.1"

/>

</target>

<target name="package" description="包装成 JAR 檔" depends="compile">

<mkdir dir="${build.dir.bin}"/>

<jar basedir="${build.dir.classes}"

jarfile="${build.dir.bin.jarunobfus}"

manifest="MANIFEST.MF">

<fileset dir="${res.dir}"/>

</jar>

</target>

<target name="obfuscate" description="使用混淆器" depends="package">

<java fork="yes" classname="RetroGuard"

classpath="${obfuscator.lib};${symbian.lib.core};${symbian.lib.cawt};

${symbian.lib.javaphone}">

<arg line="${build.dir.bin.jarunobfus}"/>

<arg line="${build.dir.bin.jar}"/>

<arg line="${obfuscator.script}"/>

</java>

</target>

<target name="all" description="完成所有程序" depends="cleandir,obfuscate" />

<target name="runemudbg">

<exec executable="${symbian.emu.dbg}"/>

</target>

<target name="runemurel">

<echo message="注意,使用 Nokia 9210 SDK 中文版请勿使用此 target"/>

23

<exec executable="${symbian.emu.rel}"/>

</target>

<target name="runpjavadbg_class">

<exec executable="${symbian.pjava.dbg}">

<arg line="-cd j:\m5\build\classes Main"/>

</exec>

</target>

<target name="runpjavadbg_jar">

<exec executable="${symbian.pjava.dbg}">

<arg line="-cp j:\m5\build\bin\${jar} Main"/>

</exec>

</target>

<target name="runpjavarel_class">

<echo message="注意,使用 Nokia 9210 SDK 中文版请勿使用此 target"/>

<exec executable="${symbian.pjava.rel}">

<arg line="-cd j:\m5\build\classes Main"/>

</exec>

</target>

<target name="runpjavarel_jar">

<echo message="注意,使用 Nokia 9210 SDK 中文版请勿使用此 target"/>

<exec executable="${symbian.pjava.rel}">

<arg line="-cp j:\m5\build\bin\${jar} Main"/>

</exec>

</target>

</project>

最后,由于 Nokia 9210c 本身自型设定的问题,导致 Java 程序无法显示

中文,为了解决此问题,我们必须自行在程序之中设定字型,请修改 Main.java如下:

Main.java import java.awt.*;

public class Main

{

public static void main(String args[])

24

{

Frame f = new Frame("窗口") ;

f.setFont(new Font("monospaced", Font.PLAIN, 10));

f.setSize(200,200) ;

f.addWindowListener(new MyAdapter()) ;

Button btn = new Button("按下我") ;

btn.addActionListener(new MyHandler()) ;

f.add(btn) ;

f.show() ;

}

}

请输入 ant 或 ant all 完成 Java 程序的制作流程。 要执行我们所制作的程序,有两种方法,第一种是直接启动仿真器,然后再

进到 J:磁盘驱动器之中,直接选取 Main.class 即可执行,请使用 ant runemudbg 或 ant runemurel 启动仿真器。 第二种方法必须藉助 Personal Java 仿真器,我们可以给定类别文件所在

目录或是一个 JAR 文件作为输入,再给定主类别的名称。请使用 ant runpjavadbg_class、ant runpjavadbg_jar、ant runpjavarel_class 或 ant runpjavarel_jar 来启动 Personal Java 仿真器。 Tips 如果我们使用 Personal Java 仿真器来执行我们的程序,仿真器启动之后我们

无法看到我们的程序,这是因为我们的程序被其它程序盖掉了,请同时按下

Ctrl+Alt+Shift+K,即可关闭其它程序,关掉几个程序之后就能看到我们的程序。 程序执行画面如下:

当我们按下按钮之后,仿真器就会自动关闭。

25

SonyEricsson P800 SDK 开发入门 我们将以前面章节的范例做基础,修改 build.properties 与 build.xml 如下:

build.properties #此文件用来设定一些常用属性

#专案名称

name=uiqapp

#合成后 JAR 的檔名

jar=${name}.jar

#原始文件所在路径

src.dir=src

#资源文件所在路径

res.dir=res

#建构产物置放位置

build.dir=build

#编译后类别文件的放置位置

build.dir.classes=${build.dir}/classes

#JAR 的最终放置位置

build.dir.bin=${build.dir}/bin

#未经过混淆的 JAR 檔名

build.dir.bin.jarunobfus=${build.dir.bin}/${name}-unobfus.jar

#经过混淆的 JAR 檔名

build.dir.bin.jar=${build.dir.bin}/${jar}

#Symbian SDK 所在路径

symbian.home=d:/Symbian/UIQ_70

#Symbian 相关 Java Library

symbian.home.erj=${symbian.home}/epoc32/Java

symbian.lib.core=${symbian.home}/epoc32/Java/lib/classes.zip

symbian.lib.qawt=${symbian.home}/epoc32/Java/ext/qawt.jar

symbian.lib.util=${symbian.home}/epoc32/Java/ext/util.jar

symbian.lib.javaphone=${symbian.home}/epoc32/Java/ext/javaphone.jar

#Symbian 仿真器

symbian.emu.dbg=${symbian.home}/epoc32/release/winscw/udeb/EPOC.exe

26

symbian.emu.rel=${symbian.home}/epoc32/release/winscw/urel/EPOC.exe

symbian.pjava.dbg=${symbian.home}/epoc32/release/winscw/udeb/pjava_g.exe

symbian.pjava.rel=${symbian.home}/epoc32/release/winscw/urel/pjava.exe

#混淆器与控制档

obfuscator.lib=retroguard.jar

obfuscator.script=script.rgs

build.xml

<?xml version="1.0" encoding="Big5"?>

<project name="Symbian UIQ 入门" default="all" basedir=".">

<!-- 引入位于 build.properties 之中的常用属性 -->

<property file="build.properties"/>

<target name="prepare" description="准备工作">

<mkdir dir="${build.dir}"/>

<mkdir dir="${build.dir.classes}"/>

</target>

<target name="cleandir" description="清除目录">

<delete dir="${build.dir}"/>

</target>

<target name="compile" description="编译原始码" depends="prepare">

<javac debug="off"

bootclasspath="${symbian.lib.core}"

classpath="${symbian.lib.qawt};${symbian.lib.util};${symbian.lib.javaphone}"

srcdir="${src.dir}"

destdir="${build.dir.classes}"

target="1.1"

/>

</target>

<target name="package" description="包装成 JAR 檔" depends="compile">

<mkdir dir="${build.dir.bin}"/>

<jar basedir="${build.dir.classes}"

jarfile="${build.dir.bin.jarunobfus}"

manifest="MANIFEST.MF">

<fileset dir="${res.dir}"/>

27

</jar>

</target>

<target name="obfuscate" description="使用混淆器" depends="package">

<java fork="yes" classname="RetroGuard"

classpath="${obfuscator.lib};${symbian.lib.core};${symbian.lib.qawt};

${symbian.lib.util};${symbian.lib.javaphone}">

<arg line="${build.dir.bin.jarunobfus}"/>

<arg line="${build.dir.bin.jar}"/>

<arg line="${obfuscator.script}"/>

</java>

</target>

<target name="all" description="完成所有程序" depends="cleandir,obfuscate" />

<target name="runemudbg">

<exec executable="${symbian.emu.dbg}"/>

</target>

<target name="runemurel">

<exec executable="${symbian.emu.rel}"/>

</target>

<target name="runpjavadbg_class">

<exec executable="${symbian.pjava.dbg}">

<arg line="-cd j:\uiq\build\classes Main"/>

</exec>

</target>

<target name="runpjavadbg_jar">

<exec executable="${symbian.pjava.dbg}">

<arg line="-cp j:\uiq\build\bin\${jar} Main"/>

</exec>

</target>

<target name="runpjavarel_class">

<exec executable="${symbian.pjava.rel}">

<arg line="-cd j:\uiq\build\classes Main"/>

</exec>

</target>

<target name="runpjavarel_jar">

<exec executable="${symbian.pjava.rel}">

28

<arg line="-cp j:\uiq\build\bin\${jar} Main"/>

</exec>

</target>

</project>

最后,由于 P800 SDK 并非中文版,所以 Java 程序无法显示中文,请修改

Main.java 为英文版如下: Main.java

import java.awt.*;

public class Main

{

public static void main(String args[])

{

Frame f = new Frame("Test Window") ;

f.setSize(200,200) ;

f.addWindowListener(new MyAdapter()) ;

Button btn = new Button("Click Me") ;

btn.addActionListener(new MyHandler()) ;

f.add(btn) ;

f.show() ;

}

}

请输入 ant 或 ant all 完成 Java 程序的制作流程。 要执行我们所制作的程序,只有一种方法,就是藉助 Personal Java 仿真

器,我们可以给定类别文件所在目录或是一个 JAR 文件作为输入,再给定主类

别的名称。请使用 ant runpjavadbg_class、ant runpjavadbg_jar、ant runpjavarel_class 或 ant runpjavarel_jar 来启动 Personal Java 仿真器。 Tips 如果我们使用 Personal Java 仿真器来执行我们的程序,仿真器启动之后我们

无法看到我们的程序,这是因为我们的程序被其它程序盖掉了,请同时按下

Ctrl+Alt+Shift+K,即可关闭其它程序,关掉几个程序之后就能看到我们的程序。 在 UIQ SDK 中,如果我们使用除错版的仿真器,我们还可以使用

Ctrl+Alt+Shift+T 启动工作变换器(TaskList),选择我们的应用程序来执行:

29

选择 Main,然后点选 Go to file 即可。 程序执行画面如下:

当我们按下按钮之后,仿真器就会自动关闭。

30

结语 本文以Nokia 9210c与 SonyEricsson P800做例子,分别介绍 Symbian OS Crystal 版与 Quartz(UIQ)版 Java 程序的开发。下一次,笔者将为各位介绍更

进阶的 Symbian OS Java 程序设计,咱们下次见。

top related