明辉手游网中心:是一个免费提供流行视频软件教程、在线学习分享的学习平台!

Java嵌入式开发讲座(第3讲)

[摘要]无论学习什么新事物,都讲究循序渐进。学习J2ME也不例外,在此我想先介绍一下使用J2ME开发Palm上的一个小的应用程序,再深入探讨开发更加复杂的应用程序,好,那我么就开始吧。   第一节 获得 J2ME   你可以从Sun网站上下载到 J2ME CLDC文件。第一个文件是 j2me_cldc_-...
无论学习什么新事物,都讲究循序渐进。学习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();
  }
  }