首 页 | 新 闻 | Symbian | Android| Windows Mobile | J2ME | 下载中心 | 游戏策划招聘与求职 | 购书指南 | 视频教程
您现在的位置: 开发视界 >> J2ME >> 工具及SDK >> 正文
使用Eclipse为Nokia手机开发移动应用程序(2)
作者:佚名    文章来源:IBM    更新时间:2006-12-1 13:27:06

Eclipse 的新的类向导

尽管 Nokia 插件为生成新的类在 Tools > Nokia Developer's Suite for J2ME中提供了一个向导,但我更喜欢使用 Eclipse 的默认向导,因为它支持超类和已实现接口的自动代码完成(automatic code completion)。

图 13. 新类

从该向导中生成的主要 Java 源代码文件如下所示:

图 14. 生成的源代码

TutorialMidlet 类

TutorialMidlet 类是为应用程序提供输入执行的类。Java 运行时环境(Java Runtime Environment,JRE)首先会实例化这个类,然后调用其 startApp() 方法启动 midlet。在用户终止应用程序时,可以调用 destroyApp() 方法。

TutorialMidlet 类控制并显示应用程序中的所有 UI 屏幕。所有用户生成的软键(soft-key)事件(比如用户按下一个软键时)都由 TutorialMidlet 类处理,因为它实现了 CommandListener 接口,并将自己作为所有屏幕对象的命令监听程序附加到该接口上。UI 事件回调方法是 commandAction()

package tutorial;

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

public class TutorialMidlet extends MIDlet
                          implements CommandListener {

  Display display;
  Command greetCommand;
  Command exitCommand;
  Command clearCommand;
  Command backCommand;
  WelcomeScreen welcomeScreen;
  HelloScreen helloScreen;

  // instantiate the internal variables
  public TutorialMidlet () {
    display = Display.getDisplay(this);
    greetCommand =
        new Command ("Greet", Command.OK, 0);
    exitCommand =
        new Command ("Exit", Command.EXIT, 0);
    clearCommand =
        new Command ("Clear", Command.CANCEL, 1);
    backCommand =
        new Command ("Back", Command.SCREEN, 1);

    welcomeScreen = new WelcomeScreen ();
    welcomeScreen.addCommand (greetCommand);
    welcomeScreen.addCommand (clearCommand);
    welcomeScreen.setCommandListener (this);

    helloScreen = new HelloScreen ();
    helloScreen.addCommand (exitCommand);
    helloScreen.addCommand (backCommand);
    helloScreen.setCommandListener (this);
  }

  // Called when the MIDlet is started by the AMS
  protected void startApp () {
    display.setCurrent (welcomeScreen);
  }

  protected void pauseApp () {
    // Do nothing
  }

  protected void destroyApp (boolean unconditional) {
    notifyDestroyed ();
  }

  public void commandAction (Command c, Displayable d) {
    if (c == greetCommand) {
      String name = welcomeScreen.getName ();
      helloScreen.setName(name);
      display.setCurrent (helloScreen);

    } else if (c == clearCommand) {
      welcomeScreen.setName("");
      display.setCurrent(welcomeScreen);

    } else if (c == backCommand) {
      display.setCurrent (welcomeScreen);

    } else if (c == exitCommand) {
      destroyApp (true);
    }
  }
}
实时错误检验


TutorialMidlet 类使用 WelcomeScreenHelloScreen 类,这些类您也必须键入。

Eclipse 中的高级 Java 编辑器会用红色线条(red bar)标出相关的代码路径,警告您存在这类冲突。

如果您将鼠标放在红线上,编辑器会显示一个解释框,告诉您为什么它认为这是一个错误。

实时语法检验允许开发人员利用 Java 编译器的一致性检验功能,而不用实际等待编译的完成。

图 15. 实时错误检验


如果选定 Eclipse Project 菜单中的 Build automatically 选项,

那么每当更新项目时,Eclipse 都会试着不断在后台构建该项目。

在这种情况下,Package Explorer 也会显示在构建过程中检测到的编译错误。

图 16. 自动构建错误

 

WelcomeScreen 类


WelcomeScreen 类扩展了 Form 类来展示包含一些高级 MIDP UI 组件的屏幕。

正如您已经看到的,WelcomeScreen 的软键命令和事件处理程序

被添加在 TutorialMidlet 类中。可以通过 JavaBeans 风格的 getset 方法,

从这个类的外部访问 nameField UI 组件中的数据。

以这种形式使用的图像来自外部的 PNG 图像文件 welcome.png

该文件必须位于 midlet 的运行时类路径中,以便对它进行访问。


package tutorial;

import javax.microedition.lcdui.*;

public class WelcomeScreen extends Form {

  private TextField nameField;

  public WelcomeScreen () {
    super ("Welcome");

    Image img;
    // Construct the image from the media file
    try {
      img = Image.createImage("/welcome.png");
    } catch (Exception e) {
      e.printStackTrace ();
      img = null;
    }
    ImageItem imageItem =
        new ImageItem ("", img,
              ImageItem.LAYOUT_CENTER, "Welcome");

    nameField =
        new TextField ("Please enter your name", "",
                       10, TextField.ANY);

    append (imageItem);
    append (nameField);
  }

  public void setName (String n) {
    nameField.setString (n);
  }

  public String getName () {
    return nameField.getString ();
  }
}

HelloScreen 类


HelloScreen 类扩展了Canvas 类来展示必须通过应用程序自身得到渲染的屏幕。

paint() 方法重新绘制了整个屏幕,每次屏幕需要更新时,都由系统调用该方法。

再次声明,HelloScreen 的软键命令和事件处理程序被添加在 TutorialMidlet 类中。

屏幕上渲染的名称字符串是通过 setName() 方法在显示该屏幕之前设置的。

图像文件 hello.png 也必须位于 midlet 运行时类路径中。


package tutorial;

import javax.microedition.lcdui.*;

public class HelloScreen extends Canvas {

  private int width, height;
  private String name;
  private Image img;

  public HelloScreen () {
    width = getWidth ();
    height = getHeight ();
    name = "unknown";

    // Construct the image from the media file
    try {
      img = Image.createImage("/hello.png");
    } catch (Exception e) {
      e.printStackTrace ();
      img = null;
    }
  }

  public void setName (String n) {
    name = n;
  }

  // Paint the screen based on the name
  protected void paint (Graphics g) {
    g.setColor(0xffffff);
    g.fillRect(0,  0, width, height);
    g.setColor(0x000000);

    g.drawImage (img, width / 2, height / 4,
            Graphics.VCENTER | Graphics.HCENTER);

    g.setFont(Font.getFont(
                Font.FACE_PROPORTIONAL,
                Font.STYLE_BOLD,
                Font.SIZE_LARGE));
    g.drawString (name, width / 2, height * 3/4,
            Graphics.BASELINE | Graphics.HCENTER);
  }
}

不再有错误


键入所有的源代码,如果 Eclipse 没有显示任何错误或不一致,

您就已经为运行 midlet 做好了准备!

图 17. 没有错误,运行 midlet


 
复制资源文件


WelcomeScreenHelloScreen 类使用了两个外部图像文件。

这两个文件都必须位于 midlet 的运行时类路径中。不幸的是,

从 Eclipse IDE 内部访问运行时类路径(项目中的 bin 目录)不是一件很容易的事;

必须从 IDE 的外部复制这些文件。

 

图 18 展示了 Windows 文件浏览器中的 bin 目录。

图 18. 复制资源文件

 
运行 midlet


要在仿真器中运行 midlet,首先要在 Package Explorer 中
选择目标 MIDlet 类(这里是 TutorialMidlet类)
,然后选择 Run > Run As > Nokia SDK
图 19. 运行 midlet 

 

查看操作中的仿真器



正如配置中所指定的那样,仿真器是从一个诊断窗口开始的。
图 20. 从一个诊断窗口开始的仿真器 
该仿真器响应用户的输入。
 
图 21. 响应用户输入的仿真器 
 

设置调试器



Nokia 设备 SDK 提供了有限的调试功能。您可以使用 Eclipse 的插件调试器
来收集调试信息,并与 SDK 仿真器进行交互。
首先,您必须在 Windows > Preferences 窗口中设置调试器。您应该取消
所有处于挂起状态的选项的选定,并将调试器的超时时间增加到 20,000 毫秒。
图 22. 设置调试器 
 
设置中断点


使用 Eclipse 的 Run 菜单,您可以设置中断点,并在源代码编辑器中
观察游标所在位置上的中断点。因为 Nokia SDK 中有一个 bug,
进入方法可能导致仿真器崩溃,所以,您应该只设置方法中断点。
 
图 23 显示了一个方法中断点,该中断点正如编辑器左边绿色点所指出的那样。
为了使其生效,您还必须为该中断点重新构建应用程序。
图 23. 设置一个中断点 

运行调试器


现在,您可以使用 Run > Debug ... 在调试模式下运行 midlet。仿真器启动正常,
但当您击中该中断点的时候(比如说这里按下软键来调用方法处理程序的 commandAction() 方法),
Eclipse 会将它的显示从 Java 透视图更改为调试透视图。它将显示调用堆栈、
当前中断点和堆栈中的变量值。在回顾了这些数据之后,您就可以使用 Run 继续您的执行操作。
图 24. 调试透视图 

生成 JAR 和 JAD 文件


为了在实际的硬件设备上运行 midlet,必须将它们打包到 JAR 和 JAR 描述符(JAD)文件对中,
这两个文件是随 J2ME 空中下载(Over-The-Air,OTA)应用程序自动配置规范一起提供的。
可以使用 Tools > Nokia Developer's Suite for J2ME >
New Application Package 向导来生成 JAR 和 JAD 文件。
您可以选择生成新的文件对,或者编辑现有的文件对。
图 25. 新的 JAR 和 JAD 文件对 
 
定制属性


您可以在 JAD 和 JAR 清单文件中定制 midlet 名称、描述、版本号和其他许多属性,
其中包括用户定义的属性。
您还可以控制 JAR 文件中包含哪些类和资源文件。
图 26. 编辑 JAR/JAD 属性 
预览 JAR/JAD 文件


单击 Preview 来预览 JAD 和 JAR 清单文件。
图 27. 预览 JAR/JAD 清单文件 

生成文件


单击 Generate 来实际地生成 JAD 和 JAR 文件。您可以在项目根目录中替换生成的文件。
图 28. 生成实际的 JAR/JAD 文件 

为包签名


使用 Tools > Nokia Developer's Suite for J2ME > 
Sign Application Package 向导,
可以对 midlet 进行数字签名,以便将其发布。该向导允许您导入自己的数字证书。
它为 JAR 清单和 JAD 文件添加了数字签名和相关的公钥证书。
图 29. 为应用程序包进行签名 

测试仿真器中的包



使用 Tools > Nokia Developer's Suite for J2ME 
> Start Emulators 向导,
您可以在设备仿真器中测试运行 JAD 文件。这个 JAR 文件在 JAD 文件中提到过。
您可以对相同的 midlet 启动多个仿真器实例。每个仿真器实例都有一个不同的假的电话号码。
图 30. 为进行测试而运行 JAD 文件 
 
在仿真器中测试 OTA


使用 Tools > Nokia Developer's Suite for J2ME > Start Emulators 向导,
您还可以在设备仿真器中测试 JAD 和 JAR 文件的 OTA 配置。仿真器试图从 URL 安装 JAD 文件,
并通过安全和权限检验来查看它是否是一个 OTA midlet,而不用直接运行 JAD 文件。
图 31. 测试 JAR/JAD 文件的 OTA 配置 

 
在局域网上进行部署


有了 JAR 和 JAD 文件,您就可以使用 Tools > Nokia Developer's Suite for J2ME
 > Deployment 向导,
通过串行连接和蓝牙连接将它们推(push)向电话。被推的(pushed)应用程序将安装在电话上。
图 32. midlet 的局域网安装 
 
在 OTA 服务器上进行部署


为了将 midlet 推向本地串行网络和蓝牙网络之外的一般公众,
必须在公共 OTA 服务器上放置 JAD 和 JAR 文件,
这样,任何移动用户都可以通过无线数据网下载和安装它。
该部署向导支持使用 FTP 将这些文件复制到将 OTA 服务器作为主机的 ISP。
它自动生成一个 WML 文件,
该文件包含到 JAD 文件的链接。当移动用户通过电话或者单击该链接,
从他们自己的 WML 浏览器访问这个 WML 页面时,
会自动触发电话安装 midlet。
 
图 33. 将 midlet 传输到 OTA 服务器 
 
 

相关文章:
用J2ME在移动设备上实现动画
一些实用的图形用户界面方法
我的第一个J2ME程序
J2ME手机文件加密
编写Palm J2ME红外线“聊天”程序
解决J2ME联网时出现的中文乱码问题
J2ME专业手机游戏开发基础(一)
SVG(JSR 266)开发入门指南
 

站点地图 | 加入收藏 | 联系站长 | 广告服务 |
QQ:280529124  Tel:0592-8271361 辽ICP备05021703号