2.1 使用Netbeans开发MIDP应用程序

来源:互联网 发布:mac book air 11.6 编辑:程序博客网 时间:2024/05/21 09:54
本章要点
¿ 熟练使用Netbeans IDE开发MIDlet
¿ 掌握MIDlet应用程序模型和开发流程
¿ 熟练使用WTK和命令行方式开发MIDlet
¿ 搭建OTA下载服务器 
上一章主要讲述了J2ME平台的体系结构和主要内容,介绍了J2ME平台两个重要的配置CLDC和CDC及相关的简表。本章主要关注的是如何开发MIDP应用程序。读完本章的内容,读者应该了解MIDP应用程序的开发流程,掌握MIDlet应用程序模型,熟练使用Netbeans IDE和Mobility Pack来开发MIDP应用程序。
Netbeans是一个开源项目,致力于为开发者提供稳定、出色的开发工具。Netbeans IDE和Netbeans平台是netbeans.org的两个著名产品。在编写本书的时候,Netbeans IDE已经被下载了500万次,可见这一集成开发环境受欢迎的程度。目前最为稳定的版本是Netbeans IDE 4.1,虽然已经发布了功能更为强大的Netbeans IDE 5.0 beta版,我们还是推荐开发者使用Netbeans IDE 4.1,同时我们期待Netbeans IDE 5.0正式版的发布。本书的代码全部使用Netbeans IDE 4.1中文版编写,运行操作系统为Windows XP。
Mobility Pack用于开发、测试和调试MIDP应用程序。Mobility Pack 4.1可以和Netbeans IDE 4.1无缝集成,支持CLDC 1.1和MIDP 2.0开发环境。Mobility Pack还可以很容易地与第三方模拟器集成,为开发者提供了所需的运行环境。
关于Netbeans IDE和Mobility Pack的详细信息可以参考http://www.netbeans.org。
2.1  使用Netbeans开发MIDP应用程序
所谓“工欲善其事,必先利其器”。在讲述MIDP应用程序环境和MIDlet应用程序模型之前,我们需要首先搭建起J2ME的开发环境并编写一个简单的MIDlet,这样可以更快地带领读者进入移动开发世界。笔者认为,理解概念与动手实践交替进行有助于更好地掌握这门技术。
2.1.1 安装Netbeans IDE 4.1和Mobility Pack 4.1
1.安装Netbeans IDE 4.1
假设你已经在个人电脑上正确地安装了J2SDK(Java 2 platform Software Development kit),并且Java运行环境可以正常工作。
(1)首先从http://gceclub.sun.com.cn/download.html下载Netbeans IDE 4.1和Mobility Pack 4.1中文版(本书附带光盘中有上述安装软件)。
(2)双击Netbeans IDE 4.1中文版的安装文件,安装系统会首先检查您的Java运行环境是否安装正确。如果正常将进入安装向导界面,如图2-1所示。
(3)接受许可协议中的条款,选择安装目录。这里把Netbeans IDE 4.1安装在C:/Program Files/netbeans目录,如图2-2所示。
 
         图2-1  Netbeans IDE安装向导                         图2-2  选择安装目录
(4)单击【下一步】按钮,安装系统会搜索操作系统上已经安装的J2SDK。笔者的计算机安装了J2SDK1.4.2_03,你可以选取其他JDK,方法是键入JDK的安装目录或单击【浏览】按钮找到它,如图2-3所示。Netbeans 4.1需要安装J2SE JDK 1.4.2或更高版本。
(5)单击【下一步】按钮,系统开始安装Netbeans IDE 4.1,如图2-4所示。安装完成后,单击【完成】按钮。
 
        图2-3  选择Java 2标准版JDK                    图2-4  正在安装Netbeans IDE 4.1
Netbeans IDE 4.1中文版安装完成后,运行Netbeans IDE,选择菜单【文件】→【新建项目】,我们会发现可供选择的项目类别,包括“常规”、“Web”和“企业”等。这里并没有用于开发MIDP应用程序的项目类别(如图2-5所示),这是因为还没有安装Mobility Pack。如果读者具有J2SE或者J2EE的开发经验,不妨先新建几个测试项目熟悉一下Netbeans的运行环境,体验一下这款出色的Java开发工具。接下来我们要安装Mobility Pack 4.1。
图2-5  Netbeans IDE 运行界面
2.安装Mobility Pack 4.1
(1)运行Mobility Pack的安装文件。安装系统首先会检查Java虚拟机安装是否正确,然后进入Mobility Pack安装向导界面,单击【下一步】按钮并接受许可协议中的条款,如图2-6所示。
(2)Mobility Pack是Netbeans IDE上一个附加软件包,因此必须指定Netbeans的安装目录,选择Netbeans IDE 4.1的安装目录C:/Program Files/netbeans,如图2-7所示。
 
           图2-6  接受许可协议条款                     图2-7  选择Netbeans安装目录
(3)单击【下一步】按钮,系统将提示安装Mobility Pack,安装完成后关闭安装向导。
现在已经搭建好了开发MIDP应用程序的环境,不用再安装其他任何插件我们就可以开发J2EE与J2ME相结合的项目了。比起安装和配置eclipse的繁琐过程,Netbeans IDE显得更加出色。由于目前Netbeans IDE和Mobility Pack的安装和使用文档较少,因此本节多花了一些篇幅结合插图对其进行了详细的讲解。下面我们使用Netbeans IDE和Mobility Pack开发第一个MIDlet。
2.1.2 使用Netbeans IDE开发MIDP应用程序
本节将通过简单而全面的实例讲解如何使用Netbeans IDE和Mobility Pack来开发MIDP应用程序。由于篇幅有限,这里不可能一一列举Mobility Pack提供的新特性,如无线连接向导、可视化用户界面编辑器等,我们会在后面的章节中逐一讲解。
1.新建项目
新建项目之前,首先在系统的D盘创建一个目录netbeansProj用来存放项目(后面创建项目的时候会用到)。
运行Netbeans IDE,选择菜单【文件】→【新建项目】。首先要选择项目,在类别一栏中选择“移动”,项目一栏中选择“Mobile Application”,如图2-8所示。
单击【下一个】按钮进入名称和位置设置界面。这里我们需要设置项目的名称、位置和所在文件夹。在默认情况下,创建HelloMIDlet是被选中的,这里我们不选择。在项目名称中输入MobileProject,项目位置选择我们在D盘创建的D:/netbeansProj。新建项目成功后,Netbeans IDE会在D:/netbeansProj/MobileProject创建文件夹并存放项目的所有文件,如图2-9所示。
图2-8  选择项目
图2-9  设置项目的名称和位置
单击【下一个】按钮进入平台选择界面。这里需要设置模拟器平台、设备、配置版本和简表版本。这些参数不能随便设置,应该根据项目的需求而定。如果项目基于MIDP 1.0运行环境,而这里选择了MIDP 2.0,这将对以后的工作造成麻烦,当然平台选择以后可以在项目的属性中修改。这里我们选择CLDC 1.0和MIDP 2.0,如图2-10所示。
2.新建MIDlet
我们不准备编写一个HelloWorld类型的MIDlet,而是力图覆盖更多的关于MIDP开发的知识点,同时全面地展示给读者如何使用Mobility Pack开发MIDP应用程序。下面编写的程序是从资源文件读取图片和中文文本,并将其显示在手机界面上。
图2-10  平台选择
首先为MobileProject项目新建一个Java包用于放我们编写的Java源文件,方法是用右键单击“MobileProject”,然后在弹出的快捷菜单中选择【新建】→【Java包】,然后输入“com.j2medev.netbeans”。这样就在MobileProject项目中创建了com.j2medev.netbeans包。
接下来要为MobileProject项目创建资源文件——一个包含中文的文本文件和png格式的图片。首先切换到文件视图,将新建文件夹命名为res。接着以res作为父文件夹新建两个子文件夹,分别命名为imagestext。然后把事先准备好的png图片复制到images文件夹中,使用Windows操作系统自带的记事本新建一个文本文件,输入内容“欢迎来到移动开发世界”。值得注意的是,在存储文件时需要将编码格式指定为UTF-8(这是大多数手机都支持的编码格式)。如果想为MIDlet制作一个代表图标,那么在res文件夹下新建一个icon文件夹,把png格式的图标文件复制到此目录中。MobileProject项目结构如图2-11所示。
图2-11  MobileProject项目结构
在编写代码之前,需要把刚才新建的文件夹res加入到项目绑定的资源中,避免出现无法找到资源的问题。如果您在开发过程中遇到无法从Jar包中读取图片的问题,通常是由于项目的捆绑资源设置不正确。解决办法是:在项目视图中,右键单击MobileProject项目,在弹出的快捷菜单中选择【属性】→【库和资源】→【添加文件夹】,把MobileProject下的res目录加入到绑定资源中,如图2-12所示。
图2-12  为MobileProject添加捆绑的库和资源

 

做好上述准备工作后,开始使用代码编辑器编写MIDlet。切换到项目视图,新建一个MIDlet命名为TurboMidlet,设置MIDlet的图标为/icon/icon.pngTurboMidlet的代码如下所示。

package com.j2medev.netbeans;

 

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

 

public class TurboMidlet extends MIDlet implements CommandListener{

   

    private Display display = null;

    private Form mainForm = null;

    public static final Command exitCommand = new Command("退出",Command.OK, 1);

   

    //startApp()方法是程序的入口,相当于Java应用程序中的main()方法

    //startApp()同时是MIDlet的生命周期方法

    public void startApp() {

        if(display == null){

            display = Display.getDisplay(this);

        }

        mainForm = new Form("TurboMIDlet");

        Image img = getImage("JavaPowered-8.png");

        mainForm.append(img);

        String text = "";

        try{

            text = getText("j2medev.txt");

        }catch(IOException ex){

            text = "读取文本出错";

        }

        mainForm.append("/n"+text);

        //mainForm添加Command,用于与用户交互

        mainForm.addCommand(exitCommand);

        mainForm.setCommandListener(this);

        //mainForm设置为手机界面的当前显示对象

        display.setCurrent(mainForm);

    }

   

    private Image getImage(String name){

        Image img = null;

        try{

            //读取images目录下的图片

            img = Image.createImage("/images/"+name);

        }catch(IOException ex){

            ex.printStackTrace();

        }

        return img;

    }

   

    private String getText(String name) throws IOException{

        //getResourceAsStream()是将资源文件与java流关联的最好方法

        InputStream is = getClass().getResourceAsStream("/text/"+name);

        if(is != null){

            ByteArrayOutputStream baos = new ByteArrayOutputStream();

            int ch = 0;

            //将文本文件的内容写入到baos开辟的内存中

            while((ch = is.read()) != -1){

                baos.write(ch);

            }

            //返回文本文件内容的字节数组

            byte[] text = baos.toByteArray();

            baos.close();

            //由于包含中文,所以编码转换为UTF-8

            return new String(text,"UTF-8");

        }else{

            return null;

        }

       

    }

    public void pauseApp() {

        //在本例中不做任何处理

    }

   

    public void destroyApp(boolean unconditional) {

        //在本例中不做任何处理

    }

   

    public void commandAction(Command cmd,Displayable displayable){

        if(cmd == exitCommand){

            destroyApp(false);

            notifyDestroyed();

        }

    }

}

右键单击MobileProject,在弹出的快捷菜单中选择【运行项目】,也可以按F6键运行主项目。TurboMidlet的运行界面如图2-13所示。

  

2-13  TurboMIDlet运行界面

生成项目后,Netbeans IDE会在项目所在的目录创建dist文件夹,里面是最终的发布软件MobileProject.jarMobileProject.jad。初学者也许不能完全明白上面的代码,我们会在下面的内容中对MIDlet应用程序模型进行详细的讲解。