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,在前添加两行:
net.rim.blackberry.lang.zh_CN_Pinyin
net.rim.blackberry.lang.zh_CN.renderingSupport
这样模拟器系统就有了
中文显示支持和
中文输入支持。
可以将
8820.xml文件中开发时不需要加载的应用程序删除掉,这样可以提高模拟器的启动速度。如:
net.rim.java.tasks
net.rim.java.memopad
net.rim.java.docViewer
net.rim.java.passwordkeeper
net.rim.java.browser
net.rim.java.browser.javascript
net.rim.java.help
net.rim.java.maps
net.rim.java.blackberrymessenger
点击运行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程序了。但学习编程不是就此止步,需要解决实际的问题。开发一个构思中的软件需要一个好的开发环境、入门过程中也遇到了一些问题、如何快速提高编写代码的水平......等等诸如此类的问题也浮上水面。
第二章“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