网上针对J2ME开发的框架很少,以前曾分析过ZKMOB,觉得这个框架不错,感兴趣的话,你可以到SOURCE FORGE上下载,ZKMOB工作原理是通过连接服务器,然后请求某个地址,等服务器返回XML格式的文件,再分析这个文件信息并显示其内容,这个XML格式的文件既是数据的载体,同时还能控制界面的显示,这个思路跟我接下来要介绍的一套J2ME框架很类似。
在实际开发中,我们可能在不同的项目中实现了很多的功能,比如浏览新闻功能,拍照功能,播放音频功能等等, 那么我们经后在开发其它项目的时候,有没有可能复用这些功能呢,大家都知道,面向对象编程一个优势就是复用,复用的好处很明显,它可以增加代码的利用率,减少你测试的时间,同时也可以增强软件的稳定性, JAVA语言给我们提供了这种可能。而将各个功能模块化,正是这套框架的特色。
接下来,介绍一下如何在该框架下编写一个功能模块,并将该模块加载到应用程序中。
我假设你有过J2ME的开发经验,而且对ECLIPSE比较了解,因为我都是用ECLIPSE开发,具体的设置细节就不讲了。我的开发环境是ECLIPSE 3.2,WTK 2.2 ,JDK 1.5。
一 下面介绍开发功能模块的具体步骤:
1 首先,新建一个J2ME工程,工程名为EXAMPLE
2 在主工程下新建两个源文件夹,一个src用来放代码,一个res用来放资源
3 导入开发包AppFrame.jar,这一步可能问题比较多,我以图片说明
1)点击Example,右键,选择 构建路径-》配置构建路径-》库
2) 添加变量
如果变量没建过,可以在上面点“配置变量”
3)新建一个变量
4) 点击文件夹,找到你放AppFrame.jar的目录,名称为THIRDLIB
5)回到第三步的界面,此时应有THIRDLIB这项,双击THIRDLIB,点变量,选择AppFrame.jar
6) 点击排序和导出,如果你的工程需要某些包的话,必须选上。千万不要将J2ME library选上,因为真机上已经有这个包了
这样写,应该够详细了吧,如果工程报错,基本就是这里设置出了问题,再回来检查吧。
4 在src下新建一个包,包名为com.example.test
5 在该包下新建一个类,Example ,这个类必须从Application继承,如下表:
(代码的具体含义,以后再解释)
package com.example.test;
import javax.microedition.lcdui.Image;
import com.frame.application.Application; import com.frame.application.DisplayFactory; import com.frame.util.ResUtil; import com.frame.util.XmlUtil; import com.frame.display.DisplayManager;
public class Example extends Application { public Example() { super(); }
public String getName() { return "j2me框架演示程序1"; }
public Image getAppIcon() { ResUtil.baseDir = "/example/"; return ResUtil.getStaticImage("ex1.png"); }
public void doApplication() { XmlUtil.initXmlFile("/example/Index.xml"); DisplayManager.getCurrent().setDisplay( DisplayFactory.getDisplayable("Index")); }
public void register() { }
public void initialize(boolean isFirst) { }
public void finalizeApp() { }
public String getHelpString() { return "j2me框架演示程序 /n Author:feiya Date: 2007-8-28 "; }
public void doSearch() { }
public boolean supportSearch() { return false; }
public void doSysManager() { }
public boolean supportSysManager() { return false; }
public boolean supportHelp() { return true; }
public boolean supportParserXml() { return false; } } |
6 在res下新建一个目录example,以后这个模块的资源就放在这个目录下
7 在目录example下,建一个XML文件,命名为index.xml
(具体含义,以后再解释)
<XmlFile> <Html Name="Index" AutoSave="1" AutoCache=""> <Body> <Item DisplayName="Type:Content" File="typeContent" Type="Task"/> <Item Type="Hr"/> <Item DisplayName="Type:Hr" File="typeHr" Type="Task"/> <Item Type="Hr"/> <Item DisplayName="Type:InputBox" File="typeInputBox" Type="Task"/> <Item Type="Hr"/> <Item DisplayName="返回" Type="Back"/> </Body> </Html> <Html Name="typeContent" AutoSave="0" AutoCache="1"> <Body> <Item Type="Content" Align="left">左对齐</Item> <Item Type="Hr"/> <Item Type="Content" Align="center">居中对齐</Item> <Item Type="Hr"/> <Item Type="Content" Align="right">左对齐</Item> <Item Type="Hr"/> <Item Type="Content" Color="0000FF">字体颜色:蓝色</Item> <Item Type="Hr"/> <Item Type="Content" UnSelectBgColor=" 00000F " >未选中时的背景色:</Item> <Item Type="Hr"/> <Item Type="Content" TopMargin="10">上边距:10</Item> <Item Type="Hr"/> <Item Type="Content" BottomMargin="10">下边距:10</Item> <Item Type="Hr"/> <Item Type="Content" LeftMargin="10">左边距:10</Item> <Item Type="Hr"/> <Item Type="Content" RightMargin="10">右边距:10</Item> <Item Type="Hr"/> <Item DisplayName="返回" Type="Back"/> </Body> </Html> </XmlFile> |
7 在目录example下,建一个图片,命名为ex1.png
二 下面介绍如何建个主工程来包含以上的功能模块
1 新建个工程,工程名Application
2 在主工程下新建两个源文件夹,一个src用来放代码,一个res用来放资源
3 点击Application,右键,构建路径-》配置构建路径-》项目-》添加-》Example
然后选择排序和导出,将Example这个复选框选上。这样的话,就将测试模块包含到这个主工程中。
4 导入开发包AppFrame.jar,同功能模块
5 在src下新建一个包,包名为com.frame.soft
6 在该包下新建一个类,MainMidlet ,这个类必须从AppMIDlet继承,如下表:
(具体含义,以后再解释)
public class MainMidlet extends AppMIDlet { public MainMidlet() { super(); try { Class c = Class.forName("com.example.test.Example"); addApplication(10, c); } catch (Exception ex) {
} } |
最后显示效果:
|
点击图标,程序就会分析该模块下资源包里的index.xml文件,然后显示
|
点击Type:Content项
|
如果将以下代码注释掉:
//Class c = Class.forName("com.example.test.Example"); //addApplication(10, c); |
显示效果如下:
|
说明你刚才的功能模块已经被去掉了。
这样的话,你只要将你现有的功能给模块化,那么今后写程序,对于已经实现了的模块,只要添加到主工程里就行了,简单吧。
FAQ:
1 导入的时候错误,出现红叉叉
我碰到过两种情况:
1) 没有为工程指定一个模拟器,就是没有引用MIDP包
2) 配置构建路径出错
2 调试的时候,一闪而过
Window->Preferences->Java->Debug
去掉Suspend execution on uncaught exceptions的对勾
去掉Suspend execution on compilation errors的对勾
底部Debugger timeout (ms)的数值改成15000
Launch timeout (ms)的数值改成20000
以上只是简单的介绍,对于复杂的应用,我们接下来再讲。
图片显示不出来,上传文件也出错,晕了。