您的位置:首页 > 编程语言 > Java开发

黑莓开发学习(入门教程)

2010-09-29 10:58 796 查看

01.1-开发环境

 
写Java程序,IDE和模拟器都是很吃资源的家伙,5G的硬盘空间、1G的内存总是需要的。软件环境我的是WindowXP SP2,开发工具就是jdk1.6.0_16+BlackBerry JDE 4.5.0,替代的工具是eclipse+bb-ant-tools-1.2.4。BlackBerry JDE 4.7.0支持的触摸屏的BB,但大多数人还有冲着Q键盘去的吧,还是以BlackBerry JDE 4.5.0为主要的环境。
 

01.2-阅读对象

 
所有对BB程序开发有兴趣的TX,由于不是从程序开发的最基本概念说起,需要一些程序开发的基础知识:了解OOP编程、知道Java的基本语法规则、熟悉IDE软件的使用。如果需要补充Java的知识,可以看看《Java2参考大全(第四版)》、《Effective Java中文版》等 ,这些图书google一下都可以找到电子版。这只是自己学习BB开发的一个记录,不涉及高级的应用,定位就是一个入门读物吧。
 

01.3-学习资源

 
BlackBerry Developer Forums - http://supportforums.blackberry.com/rim/?category.id=BlackBerryDevelopment

BlackBerry Developer Zone - http://na.blackberry.com/eng/developers/

BlackBerryForums Developer Forum - http://www.blackberryforums.com/developer-forum/    

官网的知识库 http://www.blackberry.com/knowledgecenterpublic/livelink.exe/fetch/2000/348583/customview.html?func=ll&objId=348583
电子图书下载 - http://www.ebookpdf.net   
Inblackberry(中文) - http://www.inblackberry.com/
 


02-开发环境搭建

摘要:黑莓开发环境的搭建,说简单也简单,说复杂也复杂。简单就是安装了JDE基本就可以了,复杂就是安装过程会遇到种种奇怪的问题--不信可以google一下,迷惘的TX有很多。这一章图文并茂展示了开发环境的搭建,照猫画虎实施下来,基本可以一次成功。

02.1-思维导图



 

02.2-需要的软件

 
jdk1.6.0_16
BlackBerry JDE 4.5.0
 

02.3-搭建步骤

02.3.1-下载JDK SE和BlackBerry JDE 4.5.0。

先安装JDK后安装JDE,注意是Java的开发环境JDK不是运行环境JRE,这个下载的时候要注意。

02.3.2-设置系统参数

安装JDK,默认安装在C:/Program Files/Java/jdk1.6.0_16。
我的电脑右键----属性,高级页---环境变量
 





 
PATH 路径后添加“C:/Program Files/Java/jdk1.6.0_16/bin” (按照JDK的安装路径相应调整路径和文件名)
新建两个系统变量:
CLASS_PATH 取值为“.;C:/Program Files/Java/jdk1.6.0_16/lib/tools.jar;C:/Program Files/Java/jdk1.6.0_16/lib;C:/Program Files/Java/jdk1.6.0_16/lib/dt.jar;d:/Program Files/Java/jre6/lib;d:/Program Files/Java/jre6/lib/rt.jar”
JAVA_HOME 取值为“C:/Program Files/Java/jdk1.6.0_16”。
这里设置不正确的话,后续用JDE编译程序是会提示找不到javac.exe,无法编译。
 

02.3.3-设置JDE

开始菜单--程序--Research In Motion--BlackBerry JDE 4.5.0--JDE,运行JDE。
JDE菜单:Edit-- Preferences
选择默认的模拟器



 
设置JDE界面的字体,代码编辑器的默认字体实在不好看。
 



02.3.4-设置模拟器

打开JDE安装目录,比如“C:/Program Files/Research In Motion/BlackBerry JDE 4.5.0”,定位到simulator目录,可以看到各种型号模拟器的配置文件。



打开JDE中默认模拟器对应的配置文件,如8820.xml,在</SimulatorConfiguration>前添加两行:
<Application>net.rim.blackberry.lang.zh_CN_Pinyin</Application>

<Application>net.rim.blackberry.lang.zh_CN.renderingSupport</Application>
 
这样模拟器系统就有了中文显示支持中文输入支持
 
可以将8820.xml文件中开发时不需要加载的应用程序删除掉,这样可以提高模拟器的启动速度。如:
<Application>net.rim.java.tasks</Application>

<Application>net.rim.java.memopad</Application>
<Application>net.rim.java.docViewer</Application>

<Application>net.rim.java.passwordkeeper</Application>
<Application>net.rim.java.browser</Application>

<Application>net.rim.java.browser.javascript</Application>
<Application>net.rim.java.help</Application>

<Application>net.rim.java.maps</Application>

<Application>net.rim.java.blackberrymessenger</Application>
 
点击运行simulator目录下的fledgelauncher.exe,选择默认模拟器对应的配置文件,启动模拟器。



 
在模拟器中打开Options--Language,或根据设置向导设置,将语言设置成“中文(简体)”。
 



02.4-其他开发环境的搭建

 
eclipse+bb-ant
 
eclipse是个IDE编辑器,bb-ant是个Ant的blackberry插件,使用这两个组合可以不要看JDE丑陋的界面了。
具体的设置方法参见: http://sco.0fees.net/?cat=1 或  http://blog.csdn.net/wilesilly/archive/2009/07/12/4341932.aspx
经过实践,上述方法是可行可用的。
 
 
 

03-经典的HelloWorld程序

摘要:学习每一个语言,都离不开这个HelloWord。JDE中的HelloWord虽然是简单的,但至少有几个作用:一是可以判断调试开发环境是否正常;二是展现了BB程序的基本框架,后续的编程不过是不断的扩展而已。

既然是经典的东西,我也就随俗了。通过这个简单的程序,可以了解学习BB程序的基本框架,无论多么复杂的软件也难逃此厩了。

03.1-思维导图



 

03.2-建立工作区

在BlackBerry IDE中,项目都归属在工作区(workspace)下,这样便于项目的管理和项目间依存关系的建立。工作区(workspace)的配置信息保存在.jdw文件中,一个项目文件可以归宿与不同的工作区(workspace)。
点击JDE的菜单:File->New workspace,点击“Browse”按钮选择工作区的存放路径和文件名。
由于JDE对中文的支持不是太好,建议所有的文件名和文件存放目录都用英文命名,否则有可能在编译时提示找不到路径。
 



 

03.3-建立项目文件

在BlackBerry IDE中,项目是一个应用程序或应用库的所有代码文件、资源文件、图像等的集合,项目的配置信息保存在.jdp文件中。

为了更有条理地组织项目文件,在工作区存放目录下建立一个FirstDemo子目录,并在FirstDemo目录下分别在建立三个子目录src、img、res,分别用来存放源代码、图片、其他资源。
处理完成后的目录结构如下图:



 

在JDE的工作区点击MyApp.jdw,右键->Create new Project in MyApp.jdw....。点击“Browse”按钮选择项目文件的存放路径和文件名。默认情况下,项目名就是最后生成程序的名字。



 

03.4-建立程序文件

在JDE的工作区点击FirstDemo,右键->Create new File in Project....。点击“Browse”按钮选择程序文件(.java)的存放路径和文件名。



 
JDE将自动生成一个程序框架



 


删除自动生成的程序代码,将如下代码复制拷贝进去:

/*

作者:小叶 xiaoye.org

发布:http://hi.baidu.com/netis

可以任意转载, 转载时请务必以超链接形式标明文章原始出处和作者信息

*/
package src;
//导入库
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.MainScreen;
public class HelloWorld extends UiApplication {   

  //程序的构造函数       

    public HelloWorld() {   

         HelloWorldScreen screen = new HelloWorldScreen();   

         pushScreen(screen);   

     }   

     //程序的入口函数 java程序运行都需要这个 否则会提示找不到main的提示

    public static void main(String[] args) {   

         HelloWorld app = new HelloWorld();   

         app.enterEventDispatcher();   

     }

    //窗口类    

    public class HelloWorldScreen extends MainScreen {            

            public HelloWorldScreen() {

                     add(new LabelField("Hello World!"));   

         }   

     }

   

}

03.5-编译

点击JDE的菜单:Build->Build...,或直接快捷键F7进行编译。若JDE下方的输出窗口最后显示"Build complete.",恭喜你--第一个BlackBerry程序已成功生成了。



03.6-运行

点击JDE的菜单:Debug->Go...,或直接快捷键F5进行程序运行调试。JDE会自动调用“02.3.4-设置模拟器”中设置的模拟器进行运行调试。
首次运行会出现如下提示:



点击“Don't ask this again”,继续。待模拟器启动成功,就可以在应用程序界面中看到FirstDemo程序(和项目名一致)了。



在模拟器中用鼠标中键(或PC机的回车键)点击运行FirstDemo程序,就可以看到经典的“Hello World”了。



03.7-程序发布

首先设置待发布程序的一些信息,否则生成的ALX文件不符合要求。
在JDE的工作区点击FirstDemo,右键->properties....。在属性设置窗口的General输入有关的版权信息,最好都是英文。
 



 
点击JDE的菜单:Project -->Generate ALX file...,生成BB程序安装必须的.alx文件。
运行后在项目所在目录就可以看到.cod文件和.alx文件了,通过BB“桌面管理器”就可以安装FirstDemo到BB上了。



 

04-标准界面的HelloWorld程序

 
摘要:看到Hello World显示在BB屏幕,是不是有些激动?但这个程序最多只能算是测试开发环境是否正常可用的实验代码,没有友好的界面,没有良好的交互。一个像样的程序只要要有个彩色的窗口、有用户输入、有按钮、有菜单吧?完善一下标准的HelloWorld程序。
 
标准的HelloWorld程序也太简陋了,有了太多的想法要实现:
▲能否设置一个漂亮的程序图标,而不是黑乎乎的命令行窗口?
▲能否设置一个程序标题?
▲能否放一个按钮点击后提示欢迎信息?
▲能否自定义一个菜单?
 

04.1-思维导图



 

04.1-为程序添加图标

在JDE的工作区点击FirstDemo,右键->properties....。在属性设置窗口点击Add添加一个图像文件,支持.png、.gif、.jpg。

图像文件名必须是英文名,否则编译的时候会提示“I/O Error: invalid UTF-8 encoding”



 
程序编译运行后图标就会显示成一个笑脸:



04.2-设置程序标题

通过如下代码即可实现:
 

//设置程序的标题

LabelField title = new LabelField("Hello World",Field.FIELD_HCENTER);
this.setTitle(title);

 

04.3-设置程序主界面的背景

要实现这个功能需要分两步,

第一步:从容器控件VerticalFieldManager基础一个新布局控件BackgroundManager,增加一个背景颜色的属性,并通过重载VerticalFieldManager的paintBackground来实现自定义设置的显示。

//定义一个窗口布局控件   主要是为了能改变窗口背景颜色
public static class BackgroundManager extends VerticalFieldManager

{

    private int bgColor = Color.NAVY;

    public BackgroundManager()

     {

        super( USE_ALL_HEIGHT | NO_VERTICAL_SCROLL | NO_VERTICAL_SCROLLBAR    );

         bgColor = Color.NAVY;

     }

    

    public BackgroundManager(int bgcolor)

     {

        super( USE_ALL_HEIGHT | NO_VERTICAL_SCROLL | NO_VERTICAL_SCROLLBAR    );

         bgColor = bgcolor;            

     }

   //重新设置程序背景色彩

    protected void paintBackground(Graphics g)

     {                   

         g.setBackgroundColor(bgColor);

         g.clear();

        super.paint(g);

     }

}
 
第二步:创建一个背景容器BackgroundManager命名为mgr,并将其他控件放置在这个背景容器上,最后将背景容器放置到程序主窗口HelloWorldScreen上。

//背景容器实例

BackgroundManager mgr = new BackgroundManager(Color.MEDIUMAQUAMARINE);
//添加一个输入域

edtName = new BasicEditField("输入您的姓名: ","小叶", 20,Field.FIELD_LEFT );

mgr.add(edtName);
//添加一个按钮 点击后根据输入的内容提示

btnShow = new ButtonField("显示欢迎信息",Field.FIELD_HCENTER | ButtonField.CONSUME_CLICK );

btnShow.setChangeListener(this);

mgr.add(btnShow);    
this.add(mgr);

 
下图为实施上两步后的效果:



04.4-增加一个用户输入域

通过如下代码即可实现:
 
为了后续点击按钮可以取得录入的内容,在构造函数前定义一个输入域控件。

//定义类的元素
private BasicEditField edtName = null;  //姓名输入域

 
创建和添加数据域。

//添加一个输入域

edtName = new BasicEditField("输入您的姓名: ","小叶", 20,Field.FIELD_LEFT );

mgr.add(edtName);

 
效果见上图。

04.5-添加一个按钮

//添加一个按钮 点击后根据输入的内容提示

btnShow = new ButtonField("显示欢迎信息",Field.FIELD_HCENTER | ButtonField.CONSUME_CLICK );

btnShow.setChangeListener(this);

mgr.add(btnShow);    
this.add(mgr);

 
对按钮事件接口也需要继承后定义下接口处理

//处理按钮事件
public void fieldChanged(Field field, int ctx)

{

    if (field == btnShow) {        

         Dialog.alert("欢迎您-"+edtName.getText());

     }

};

 
程序运行后,点击按钮,按钮就会根据录入的内容显示欢迎信息,如下图。
 



04.6-自定义菜单

首先,创建需要显示的子菜单,为区分与系统默认菜单项,菜单显示名称以*开始。

//定义显示信息菜单项目
public MenuItem showItem= new MenuItem("*显示欢迎信息", 160, 10 )

{

    public void run()

     {

         Dialog.alert("欢迎您-"+edtName.getText());

     }

};
//定义显示关闭菜单项目
public MenuItem closeItem= new MenuItem("*退出", 170, 10 )

{

    public void run()

     {

         onClose();

     }

};

 
其次,重载菜单生成函数,使得自定义菜单添加到系统默认菜单中。

//重载makeMenu 添加自定义的菜单
protected void makeMenu(Menu menu, int instance)

{       

   menu.add(showItem);

   menu.add(closeItem);

}

 
菜单显示效果如下:



点击菜单后显示对话框:



04.7-完整代码

 
为了代码的维护和可读性,将定义窗口类的代码单独成一个文件HelloWorldScreen.java。创建新程序文件的方法见第三部分的“03.4-建立程序文件”。

主程序HelloWorld.java

/*

HelloWorld.java

主程序

作者:小叶 xiaoye.org

发布:http://hi.baidu.com/netis

可以任意转载, 转载时请务必以超链接形式标明文章原始出处和作者信息

*/
package src;
//导入库
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.MainScreen;
public class HelloWorld extends UiApplication {   

    //程序的构造函数       

    public HelloWorld() {   

         HelloWorldScreen screen = new HelloWorldScreen();   

         pushScreen(screen);   

     }   

     //程序的入口函数 java程序运行都需要这个 否则会提示找不到main的提示

    public static void main(String[] args) {   

         HelloWorld app = new HelloWorld();   

         app.enterEventDispatcher();   

     }

}

窗口类HelloWorldScreen.java

/*

HelloWorldScreen.java

窗口类 实现了程序的用户界面

作者:小叶 xiaoye.org

发布:http://hi.baidu.com/netis

可以任意转载, 转载时请务必以超链接形式标明文章原始出处和作者信息

*/
package src;
//导入库
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.system.Display;
//窗口类    
final class HelloWorldScreen extends MainScreen implements FieldChangeListener {

    //定义类的元素

    private BasicEditField edtName = null;  //姓名输入域

    private ButtonField btnShow = null;      //显示按钮

    //构造函数

    public HelloWorldScreen() {

        //父类的事件 显示默认的上下文菜单

        super(DEFAULT_MENU | DEFAULT_CLOSE);

        //设置程序的标题

         LabelField title = new LabelField("Hello World",Field.FIELD_HCENTER);

        this.setTitle(title);

        //背景容器实例

         BackgroundManager mgr = new BackgroundManager(Color.MEDIUMAQUAMARINE);

        //添加一个输入域

         edtName = new BasicEditField("输入您的姓名: ","小叶", 20,Field.FIELD_LEFT );

         mgr.add(edtName);

        //添加一个按钮 点击后根据输入的内容提示

         btnShow = new ButtonField("显示欢迎信息",Field.FIELD_HCENTER | ButtonField.CONSUME_CLICK );

         btnShow.setChangeListener(this);

         mgr.add(btnShow);    

        this.add(mgr);

     }

    

    //定义显示信息菜单项目

    public MenuItem showItem= new MenuItem("*显示欢迎信息", 160, 10 )

     {

        public void run()

         {

             Dialog.alert("欢迎您-"+edtName.getText());

         }

     };

    //定义显示关闭菜单项目

    public MenuItem closeItem= new MenuItem("*退出", 170, 10 )

     {

        public void run()

         {

             onClose();

         }

     };

    

     //重载makeMenu 添加自定义的菜单

     protected void makeMenu(Menu menu, int instance)

      {       

         menu.add(showItem);

         menu.add(closeItem);

     }

    

    //处理按钮事件

    public void fieldChanged(Field field, int ctx)

     {

        if (field == btnShow) {        

             Dialog.alert("欢迎您-"+edtName.getText());

         }

     };  

    

    //重载onClose, 退出时提示

    public boolean onClose()

     {

        if ( Dialog.ask(Dialog.D_YES_NO, "确定退出吗?") == Dialog.YES )

         {

             System.exit(0);

            return true;

         }

        return false;

     }  

    

    //定义一个窗口布局控件   主要是为了能改变窗口背景颜色

    public static class BackgroundManager extends VerticalFieldManager

     {

        private int bgColor = Color.NAVY;

        public BackgroundManager()

         {

            super( USE_ALL_HEIGHT | NO_VERTICAL_SCROLL | NO_VERTICAL_SCROLLBAR    );

             bgColor = Color.NAVY;

         }

        

        public BackgroundManager(int bgcolor)

         {

            super( USE_ALL_HEIGHT | NO_VERTICAL_SCROLL | NO_VERTICAL_SCROLLBAR    );

             bgColor = bgcolor;            

         }

       //重新设置程序背景色彩

        protected void paintBackground(Graphics g)

         {                   

             g.setBackgroundColor(bgColor);

             g.clear();

            super.paint(g);

         }

     }

       

}

05-再说开发环境和入门阶段的一些问题

摘要:按照教程按图索骥,应该是可以写一个像样的HelloWorld程序了。但学习编程不是就此止步,需要解决实际的问题。开发一个构思中的软件需要一个好的开发环境、入门过程中也遇到了一些问题、如何快速提高编写代码的水平......等等诸如此类的问题也浮上水面。

 
 
05.1-调试一个顺手的开发环境
第二章“02-开发环境搭建”提到了两种方法:使用BlackBerry JDE 4.5.0或eclipse+bb-ant,前者不利于代码效率,后者配置太复杂了,变更一个Wordspace需要重头来一遍。使用下来还是eclipse+BlackBerry_JDE_plug-in_for_Eclipse比较实用和易用。

BlackBerry_JDE_plug-in_for_Eclipse可以从BlackBerry的官方网站上下载,JDE限制中国大陆的IP地址下载,但是这个插件在填写一些简单的资料后可以下载。下载地址:http://na.blackberry.com/eng/developers/javaappdev/javaeclipseplug.jsp   。

下图为下载前需要填写资料的表单:




BlackBerry_JDE_plug-in_for_Eclipse支持的eclipse是3.4版本的,eclipse官方网站上现在提供的版本是3.5的,插件安装是提示版本过低,需要下载eclipse 3.4然后再安装插件。

一般使用Eclipse IDE for Java Developers 这个版本就可以了。

将eclipse3.4解压到一个目录,然后运行“BlackBerry_JDE_PluginFull_1.0.0.67.exe”安装BlackBerry_JDE_plug-in_for_Eclipse,在安装的过程中选择eclipse3.4目录。



安装完毕,设置JDE Version,eclipse菜单“Window->Preferences->BlackBerry”,配置BlackBerry JDE的参数。



中文化设置参见:“02-开发环境搭建-02.3.4-设置模拟器”,其中模拟器的目录改到eclipse下,如:

D:/eclipse3.4/plugins/net.rim.eide.componentpack4.5.0_4.5.0.16/components/simulator

05.2-使用eclipse写黑莓程序

05.2.01-Eclipse 菜单 File->New->Project



点击“Next”建立一个HelloWorld的项目,项目文件结构清单如下:



05.2.02-建立程序文件

eclipse菜单“File->New->Class”,建立一个新的Java Class文件“HelloWorld”作为主程序。



在建立一个新的Java Class文件“HelloWorldScreen”作为主窗口类。

HelloWorld.javaHelloWorldScreen.java

/*

作者:小叶xiaoye.org

发布:http://hi.baidu.com/netis

可以任意转载, 转载时请务必以超链接形式标明文章原始出处和作者信息

*/
import net.rim.device.api.ui.UiApplication;
public class HelloWorld extends UiApplication {

    public HelloWorld() {

         HelloWorldScreen screen = new HelloWorldScreen();

         pushScreen(screen);

     }

    public static void main(String[] args) {

         HelloWorld app = new HelloWorld();

         app.enterEventDispatcher();

     }

}
 

/*

作者:小叶 xiaoye.org

发布:http://hi.baidu.com/netis

可以任意转载, 转载时请务必以超链接形式标明文章原始出处和作者信息

*/
import net.rim.device.api.ui.component.LabelField;   
import net.rim.device.api.ui.container.MainScreen;  
public class HelloWorldScreen extends MainScreen {   

    public HelloWorldScreen() {   

         add(new LabelField("Hello World!"));   

     }   

}  

05.2.03-编译

项目选项中选择了Build Automatically,eclipse已自动编译文件了。



修改代码后,Alt+B重新生成程序。

05.2.03-调试和运行

设置调试参数,点击调试图标打开Debug Configurations。



在设置画面中选择模拟器参数



后续开发就可以直接点击这个“BB8820”运行了。



05.3-加速程序的调试

在开发过程中发现,调试或运行程序的过程中,每次点击前述配置文件“BB8820”运行,需要相当长时间才能完成模拟器加载、程序运行。在不需要对程序设置断点跟踪的情况下,可以通过如下方式快速看到程序运行的结果。

(1)运行JDE安装目录下的“C:/Program Files/Research In Motion/BlackBerry JDE 4.5.0/simulator/fledgelauncher.exe”,启动模拟器;

(2)模拟器菜单“File->Load Java Programe......”,打开项目所在目录下的“HelloWorld.cod”,模拟器会重新加载程序,点击程序运行即可看到运行效果。节省了模拟器启动的时间。

05.4-API库的选中和签证

如果使用net.rim.blackberry开头的blackberry专用的API,大多数API需要取得BlackBerry的签证才可以使用。在程序中使用这些专用的API,模拟器可以运行但是无法运行在设备上。



05.4-学习优秀代码

开发程序,学习优秀的代码可以起到事半功倍的作用。LogicMail是一个J2ME E-Mail客户端支持IMAP和POP协议,可以运行在OS 4.2以上版本的BB中。这是一个开源的软件,可以从这里查看其源代码,可以学习到许多。



 

 
 

      RIM公司为BlackBerry开发提供了多种开发平台,不同平台的开发人员可以选择自己熟悉的开发工具,但是个人觉得还是BlackBerry JDE Plub-In for Eclipse最好用

       首先安装JDK,官方下载地址:http://java.sun.com/javase/downloads/index.jsp

       Eclipse官方下载地址:http://www.eclipse.org/downloads/,Eclipse是一个硬盘程序,一般把下载的压缩文件解压就可以使用。

       BlackBerry JDE Plug-In for Eclipse下载地址:http://www.blackberry.com/developers
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐