注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mr. almost

Never mind,live goes on.On my way again.

 
 
 

日志

 
 

【转】初窥j2me polish  

2010-04-13 13:28:11|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

J2ME polish使用心得一(介绍j2mepolish) 收藏

1.简介

2.特色

2.1 预处理(Preprocessing)

2.2 手机数据库

2.3 高级UI

2.4 资源文件

2.5 其它 

3.安装j2mepolish

3.1 下载

3.2 安装

3.3 运行例子

4.新建第一个工程

5.小结

1.简介

近来在公司用j2mepolish开发了一个j2me的application,对j2mepolish的使用有所得,在此用这一系列文章记下对j2mepolish的心得,希望与大家共同交流进步。

j2mepolish是德国的一个open source,致力于使j2me的开发得更快捷和方便,它的强大之处体现在只需要一套代码就可以兼容尽可能多的手机platform。

2.特色

经过使用及介绍,j2mepolish具有以下特色

2.1 . 预处理(Preprocessing)

j2mepolish使用了一系列预处理指令(Preprocessing Directives),例如在代码中

//#if {test}

   System.out.println("is test mode");

//#else

   System.out.println("is not test mode");

//#endif

当在build.xml中执行"ant emulator”时,运行到这段代码的时候就会输出"is test mode",因为这里{test}的值为true; 直接执行"ant",{test}值为false,则会输出"is not test mode"(这是因为在build.xml中,target为"emulator"时,把test设为了true,后面有详细解释)

在使用这种预处理的方式下,j2mepolish提供了可以兼容各个手机platform的方法,例如如果手机支持MMAPI,我们则播放一段music(不管从网络还是手机本地)

//#if polish.api.mmapi

Player player = Manager.createPlayer(url);

player.realize();

player.start();

//#endif

如果手机不支持MMAPI,则这段不会被包含到jar中,至于j2mepolish如何知道你的手机是否支持MMAPI,取决于:a.你想生成的手机型号或platform;b.j2mepolish本身带有一个关于各个手机型号的参数;

这样的好处是,你可以将你想支持的手机的代码都写在同一个文件内,j2mepolish会自动生成多份jar,适用于每一个你想支持的手机。

当然j2mepolish的预处理所带来的便利远不只这些的,还有对于UI设计的支持,调试输出等;

2.2 手机数据库(Device Database)

   安装后的j2mepolish包含了一个几乎囊括当下流行的手机的参数的数据库,其实就是一些xml文件,但这些文件对于编译生成jar起了至关重要的作用,可以打开devices.xml,里面包括手机各项重要的参数,例如是否支持文件操作,是否支持媒体访问等等。有了这样一个数据库,j2mepolish就可以做到像在2.1中提到那种一份代码兼容多个机型的功能。

2.3 高级UI

j2mepolish带有一套很完备的高级UI,可以点击这里查看,需要指出的是,j2mepolish的UI别出一格地使用了CSS来控制外观,可以像设计网页那样来设计,例如

.myStringItem {

        text-effect: shadow;

        text-shadow-color: black; /* = default */

        layout: horizontal-center | horizontal-expand;

        font {

                face: proportional;

                size: large;

                style: bold;

                color: #eef1e5;

        }

        background {

                type: simple;

                color: #ffffffff;

        }

}   

应用j2mepolish的预处理(Preprocessing)来运用这个样式

//#style myStringItem

StringItem myString = new StringItem(null,"J2ME Polish");

效果

在代码中使用了“//#style”来引用css中的“myStringItem”样式,这样的好处是代码中不用出现关于UI的设计语句,保持了代码的整洁,同时开发人员可以把精力注重在逻辑设计上,另外,更换UI主题也就是更换css,十分方便。

2.4 资源文件

按照以往的经验,如果在源文件中出现了中文,我们就需要转换成unicode再hardcode到源文件中,或者使用native2ascii来转换,j2mepolish使用了类似struts的方式,可以将中文放在一个文件内,然后在源文件中直接引用,这在后面的例子可以看到。

2.5 其它

 j2mepolish提供了一个 html browser,尽管对html tag的支持不多,但可以自行继承来扩展支持更多的tag;j2mepolish还提供了RSS browser,感觉上还不错;另外,j2mepolish还对RMS的操作进行了封装,省去了转换上的麻烦,使开发便利不少。

3.安装j2mepolish

3.1 下载

可以到j2mepolish的官方网站上下载,截止到目前的最新版本为2.0.2

3.2 安装

假设下载的安装包名为“j2mepolish-2.0.2.jar”,用cmd在文件所在目录下执行“java -jar j2mepolish-2.0.2.jar”

然后一直"next",选择安装路径

然后选择模拟器的路径

也可以在安装后修改j2mepolish目录下的global.properties里的属性,如果需要安装eclipse和netbean的j2mepolish 插件,还需要选择

然后就是选择安装的组件,最方便的方法是全部都勾选,注意默认情况下是不包含安装源代码的(最下面一项)

选择好再点击“next”就可以开始安装了

3.3 运行例子

安装完,可以在cmd下进入j2mepolish所在目录下的samples文件夹,进入其中一个例子,例如"tabbedform",然后执行

在sun wtk2.5 上运行的结果

  

4.新建第一个工程

在eclipse中的的"New Project“,选择"java"的"J2ME polish project"

下一步输入工程名后,就是选择j2mepolish和wtk等的位置,然后就是"select targe devices",一般在Configurations选择"cldc/1.1“

Platform我选择"midp/2.0"

"Devices"我选择"Generic/Midp2Cldc11"

这些参数都是可以在生成后的项目中的build.xml文件中修改的,然后"next",然后"Finish"就可以了,目录结构如下

在"resources"文件夹下新建两个文件,一个是"polish.css",一个是"messages.txt",在"polish.css"文件输入以下代码

.myStringItem{

    font-size : large ;

    font-color : red ;

    font-style : bold ;

    border{

        width : 2 ;

    }

}

这是一个很简单的css文件,定义了一个字体与边框的样式,这个样式在我们的代码中会使用到的,然后在messages.txt中输入

hello.label=\你\好\,\多\多\指\教\!

(就是中文hello.label=你好,多多指教!)

这个messages.txt其实是相当于struts的资源文件,里面的中文需要转换成unicode码,在这里推荐一个开源eclipse插件叫"Propedit",可以在这里下载,安装后就可以直接在eclipse里输入中文,propedit会直接转换成unicode,这样就不用借助jdk的native2ascii工具了。回到代码,这里的"hello.label"在后边的代码里会引用来输出到手机屏幕上。

然后在"source/src"新建一个包(为了方便讨论,可以使用默认包),名为"com.yeahliu.helloPolish",在这个包下新建一个"Hello.java",输入以下代码

public class Hello

extends MIDlet{

    private Form mainScreen ;

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

    }

    protected void pauseApp() {

    }

    protected void startApp() throws MIDletStateChangeException {

        mainScreen = new Form(null);

        //#style myStringItem

        StringItem helloItem = new StringItem(null,Locale.get("hello.label"));

        mainScreen.append(helloItem);

        Display.getDisplay(this).setCurrent(mainScreen);

    }

}

代码很简单,可能有些奇怪的是这句"//#style myStringItem“,这个其实就是引用刚才建立的"polish.css”文件中的那个".myStringItem"样式,也就是这个helloItem输出到手机上后的样子就是".myStringItem"所描述的样式;还有一个地方是"Locale.get("hello.lable")",这个是j2mepolish用来将messages.txt中的"hello.label"的值调入源文件的,j2mepolish会解析源文件中的各种特殊指令,再生成新的源文件,例如这个Hello.java,经过j2mepolish的编译后,会在工程下生成一个"build"目录,然后j2mepolish处理后生成的新的源文件会放在(依据我当前的项目)

build\test\Generic\Midp2Cldc11\en_US\source

这个文件夹下,可以打开com\yeahliu\HelloPolish\Hello.java文件来看,已经变成这样

public class Hello

extends MIDlet{

    private Form mainScreen ;

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

    }

    protected void pauseApp() {

    }

    protected void startApp() throws MIDletStateChangeException {

        mainScreen = new Form(null);

        //#style myStringItem

        StringItem helloItem = new StringItem(null,"\你\好\,\多\多\指\教\!", de.enough.polish.ui.StyleSheet.mystringitemStyle );

        mainScreen.append(helloItem);

        Display.getDisplay(this).setCurrent(mainScreen);

    }

}

中文(你好,多多指教!)已经变成unicode码被包含进源代码里,这样省去了好多麻烦。

为了顺利可以运行,我们还需要改动下build.xml的设置,在build.xml中找到

<jad>

                <attribute name="Nokia-MIDlet-Category" value="Game" if="polish.group.Series40" />

</jad>   

在<jad>节内加入一句,变成这样

<jad>

                <attribute name="Nokia-MIDlet-Category" value="Game" if="polish.group.Series40" />

                <attribute name="MIDlet-1" value="HelloPolish,,com.yeahliu.helloPolish.Hello" />

</jad>   

这样j2mepolish就会将"MIDlet-1"这个属性添加到jad中(实际可运用于手机上的jad和jar)。

最后,我们可以来运行了,两种方式,一种是在Hello.java上点击右键,在弹出的菜单上选择"Run As",再在右边选择"J2ME Polish MIDlet";另一种是在打开build.xml的情况下,选择节"emulator",右键"Run As",再选择"Ant Build";如果第二种方式运行不了,出现"unable to find following requested device-identifiers"的错误,那么请在build.xml文件中加入

<property name="device" value="Generic/Midp2Cldc11" />

就可以运行了,结果如下图

5.小结

对j2mepolish作了一个很大概的介绍,例子很小,基本上体现了UI设计的便利,j2mepolish的预处理及资源文件的特性,总的来说,j2mepolish是一个很不错的open source,值得我们去使用探讨。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yeahliu/archive/2008/04/14/2292213.aspx#preface

  评论这张
 
阅读(148)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018