??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品一区二区三区四区,免费观看在线色综合,在线国产三级http://www.aygfsteel.com/jiansong/category/7251.html<a target=blank href=http://wpa.qq.com/msgrd?V=1&Uin=5410999&Site=www.aygfsteel.com/jiansong&Menu=yes><img border="0" SRC=http://wpa.qq.com/pa?p=1:5410999:1 alt="点击q里l我发消?></a>zh-cnWed, 28 Feb 2007 07:44:03 GMTWed, 28 Feb 2007 07:44:03 GMT60动设备开发推荐网?/title><link>http://www.aygfsteel.com/jiansong/articles/71435.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Sat, 23 Sep 2006 02:05:00 GMT</pubDate><guid>http://www.aygfsteel.com/jiansong/articles/71435.html</guid><wfw:comment>http://www.aygfsteel.com/jiansong/comments/71435.html</wfw:comment><comments>http://www.aygfsteel.com/jiansong/articles/71435.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jiansong/comments/commentRss/71435.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jiansong/services/trackbacks/71435.html</trackback:ping><description><![CDATA[ <u> <font color="#800080">动设备开发推荐网?</font> </u> <div id="wmqeeuq" class="postText"> <p>SUN J2ME 技术区Q?<a >http://java.sun.com/j2me/</a> </p> <p>中国JAVA 手机|:<a >http://www.cnjm.net/</a></p> <p>NOKIA 论坛 Q?a >http://www.forum.nokia.com</a></p> <p>Ud开发者论坛: <a >http://mobisoft.cn/bbs/</a></p> <p>中文Ud开发者博客:<a >http://mobisoft.cn/blog/</a></p> <p>嵌入开发网Q?a >http://www.embed.com.cn</a></p> <p> </p> <p>J2ME POLISHQ?a >http://www.j2mepolish.org</a></p> <p>火狐下蝲中心Q?<a >http://down.skyhu.com/</a></p> <p>J2ME 开发网:  <a >http://www.j2medev.com/</a></p> <p>A huge repository of MIDlets and the chance to make your game publicly available:    <a ><font color="#002c99">http://midlet.org</font></a></p> <p>Nice resource with mixed info on J2mE :   <a ><font color="#002c99">http://www.billday.com/j2me/</font></a></p> <p>Mobile game review site, see what games are around and how they rate:  <a ><font color="#002c99">http://www.midlet-review.com</font></a></p> <p>Excellent collection of commercial games :  <a ><font color="#002c99">http://games.macrospace.com</font></a></p> <p>Agood resource for J2ME related news, tutorials and articles :   <a ><font color="#002c99">http://www.microjava.com</font></a></p> <p>IGN's wireless gaming section :   <a ><font color="#002c99">http://wireless.ign.com</font></a></p> <p>All the info you will need to get started with Brew :   <a ><font color="#002c99">http://www.qualcomm.com/brew</font></a></p> <p>List of devices and device specs :  <a ><font color="#002c99">http://www.kobjects.org/devicedb</font></a></p> <p>Another detailed list of java devices :  <a ><font color="#002c99">http://wireless.java.sun.com/device/</font></a></p> <p>Easy to use publicly available fixed point library for J2ME :  </p> <p>     <a ><font color="#002c99">http://home.rochester.rr.com/ohommes/MathFP/</font></a></p> <p>Motorola's developer site: <a ><font color="#002c99">http://www.motocoder.com</font></a></p> <p>The biggest mophun resource around :  <a ><font color="#002c99">http://www.mophun.com</font></a></p> <br /> <br /> <p id="TBPingURL">Trackback: http://tb.donews.net/TrackBack.aspx?PostId=304592</p> </div> <img src ="http://www.aygfsteel.com/jiansong/aggbug/71435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jiansong/" target="_blank">Alex</a> 2006-09-23 10:05 <a href="http://www.aygfsteel.com/jiansong/articles/71435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>polish samples的说?初学很不?http://www.aygfsteel.com/jiansong/articles/71434.htmlAlexAlexSat, 23 Sep 2006 02:03:00 GMThttp://www.aygfsteel.com/jiansong/articles/71434.htmlhttp://www.aygfsteel.com/jiansong/comments/71434.htmlhttp://www.aygfsteel.com/jiansong/articles/71434.html#Feedback0http://www.aygfsteel.com/jiansong/comments/commentRss/71434.htmlhttp://www.aygfsteel.com/jiansong/services/trackbacks/71434.html 需?

jdk,wtk׃用说?

下蝲j2mepolish :
http://www.j2mepolish.org/downloads/j2mepolish-1.2.4.html#download

直接双击jar文g(java -jar j2mepolish-1.2.4.jar)Ҏ向导安装卛_,很简?

在eclipse中运行samples里面的menu例子.

拯 ${polish.home}/samepse/menu到eclipse的工作目?

然后建立一个java工程名ؓ menu (会自动导入拷q来的menu里面的src,res{等)

直接antq行build脚本卛_生成jar,jad文g(会发现有很多版本,不同语言,不同q_,不同midp版本?

要配|生成哪些版?或者^台的jar,jad,可以在build.xml里面配置,如下位置:

<deviceRequirements unless="test">
  <requirement name="Identifier" value="Nokia/Series60, Nokia/Series60Midp2, Generic/midp2, Generic/midp1" />
  <!-- on could use other devices for real builds, e.g. :
  <or>
  <and>
  <requirement name="JavaPackage" value="nokia-ui" />
  <requirement name="BitsPerPixel" value="16+" />
  </and>
  </or>
  -->
</deviceRequirements>

语言(默认有d文和英文)可以在如下位|配|?(我把h改称了中?

<resources
  dir="resources"
  defaultexcludes="yes"
  excludes="readme.txt"
  >
  <!-- you can add resources based on complex criterias:
  <fileset
  dir="resources/multimedia"
  includes="*.wav"
  if="polish.audio.wav"
  />
  <fileset
  dir="resources/multimedia"
  includes="*.mid"
  if="polish.audio.midi and not polish.audio.wav"
  />
  -->
  <!-- add the localization element for created localized
      versions of your application: -->
  <localization locales="cn,en_US" unless="test" />
  <localization locales="en_US" if="test" />
  </resources>

注意,如果配置了一个cn的话,要在resources里面d一个messages_cn.txt

内容可以如下:

#######################################
#                         #
#   This file contains translations   #
#   of the application.           #
#   Key and Value are separated     #
#   by the equals-sign "=".       #
#                         #
#######################################

# You can also define localized preprocessing variables here, by starting the
# definition with "var:". Variables defined here will override the ones defined
# in the <variables>-section of your build.xml.
# Variables starting with "polish." or "MIDlet-" don't need to start with "var:"
# by the way.
var:MyExampleVariable=你好,midlet
var:GameName=试

# Setting J2ME Polish variables:
polish.command.ok=认
polish.command.cancel=取消
polish.command.select=选择
polish.command.options=选项

# It's also possible to set MIDlet-attributes for your JAD- and MANIFEST-files here.
# If you like you can start them with "var:" as well, but it is not needed.
# Again MIDlet-attributes defined override the one defined in the <info>-
# and <jad>-sections of your build.xml
MIDlet-Description=中文?br />MIDlet-Name=J2ME Polish Beispiel
MIDlet-Delete-Confirm=J2ME Polish




# Setting appplication specific translations:

cmd.StartGame=${GameName} 开?br />cmd.Quit=退?br />cmd.ShowLog=log 昄

menu.StartGame=${GameName} 开?
menu.LoadGame=${GameName} d
menu.Highscore=最高分
menu.Quit=退?br />#menu.go=出发

messages.welcome=Ƣ迎? {0}!!!



=========================================

q个时候在dist目录下生成了中文的不同^台和midp版本的jad,jar文g

用模拟器q行卛_看到效果

如果要在ant的时候就打开模拟器运?修改一下build.xml的如下地?

<target name="init">
  <property name="test" value="true" /> //改ؓtrue
<property name="dir.work" value="build/real" />
<property name="deploy-url" value="" />
</target>

配置模拟?/span>的地?(不需要修?我修Ҏ不想看到内存和网l监视的那些东西)

<emulator
  wait="true"
  trace="class"
  securityDomain="trusted"
  enableProfiler="false"   //默认true?我改UCfalse
  enableMemoryMonitor="false" //默认true?我改UCfalse

  enableNetworkMonitor="false" //默认true?我改UCfalse

  if="test"
  >
  <!--
  <parameter name="-Xjam" value="transient=http://localhost:8080/${polish.jadName}" />
  -->
</emulator>

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1178720



Alex 2006-09-23 10:03 发表评论
]]>
j2mepolish的licence问题http://www.aygfsteel.com/jiansong/articles/71433.htmlAlexAlexSat, 23 Sep 2006 02:02:00 GMThttp://www.aygfsteel.com/jiansong/articles/71433.htmlhttp://www.aygfsteel.com/jiansong/comments/71433.htmlhttp://www.aygfsteel.com/jiansong/articles/71433.html#Feedback0http://www.aygfsteel.com/jiansong/comments/commentRss/71433.htmlhttp://www.aygfsteel.com/jiansong/services/trackbacks/71433.html

他的license分ؓ几种收费cd:GPL的,single的,企业?/font>

那么我们做商业开发是否能用它呢?能否使用GPL的license?是否必须购买商业版本呢?

j2mepolish的license在这里:

http://www.j2mepolish.org/licenses.html

1.如果在项目中使用GPL licenseQ则可以无限制的使用Q前提是你的目必须遵@GPL?/p>

2.Commercial LicensesQ商业许可证Q?/p>

分ؓQDeveloper Seat、Single License、Runtime License、Enterprise License

Ҏ功能Qhg一

Why do I need a commercial license?

我ؓ何需要一个商业许可证Q?/p>

The GNU GPL license requires you to publish your completely source code solely under the GNU GPL again. That's why the alternative commercial licenses exist.

GNU GPL许可证要求你在GNU GPL下,独立的完全公开你的源代码。这是Z么会存在两种单独的商业许可证?/p>



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1203988



Alex 2006-09-23 10:02 发表评论
]]>
J2ME内存优化http://www.aygfsteel.com/jiansong/articles/29629.htmlAlexAlexSun, 05 Feb 2006 13:23:00 GMThttp://www.aygfsteel.com/jiansong/articles/29629.htmlhttp://www.aygfsteel.com/jiansong/comments/29629.htmlhttp://www.aygfsteel.com/jiansong/articles/29629.html#Feedback0http://www.aygfsteel.com/jiansong/comments/commentRss/29629.htmlhttp://www.aygfsteel.com/jiansong/services/trackbacks/29629.htmlhttp://www.matrix.org.cn/resource/article/1/1561.html
out momory 一阵天旋地转内存又溢出了。在手机上这U痛苦经帔R有,套一句俗话在手机上用内存必须勒紧裤腰带。虽然现在pc内存上G都不奇?可是在手Z却只能以K来记,可能某位同志会马上蟩出来说也有上M的,C中国q不富大多数手机都是低端手机。写手机E序让我仿佛回到了dos时代Q自我安C下那个时代也炼出了不高手说不定我是下一个)。言归正传做内存优化可以归结Z下几U方法。代码优化,囄优化Q第三方工具优化{?BR>
一Q代码优?/B>
内存会溢定和代码逃不了关p?99.99%学java的h都知道垃圑֛收器是java的一大优点ƈ据此来嘲WC++。显然这个特性ؓ代码~写者省了不事Q但q个Ҏ却带来了不隐患。D个例子在游戏当中l常有不同场景的切换Q如从游戏逻辑退C菜单逻辑,Ҏ戏逻辑对象的态度很多Z选择忘记{待垃圾回收器来收尸^_^。乍看之下似乎ƈ无不妥垃圑֛收器会来善后。实际上垃圾回收器ƈ非实时的,它不像C++的Delete语句马上释放不用的内存。当从游戏逻辑切换C菜单逻辑q时两个对象同时存在很可能这时内存就不够用了。读到这里很多h会发现实际上垃圾回收器在j2me上ƈ不怎么好用Q从一个角度上来讲在j2me上所有垃圑ֿȝ手工释放,除简单类型以外所有对象都必须昑ּ地置IZ?imgs=null; 实际上java提供了一个不错的工具用来查找内存溢出,java.lang.Runtime.freeMemory() 。它可以q回当前的剩余内存数Q将它适当的安攑֜代码中可以有效的监测内存使用状况。很大一部䆾的j2meE序员之前都是从事pc软g开发工作,充裕的内存掩盖了许多写代码的不良习惯。如下所C?
//a 不ؓI?BR>a=new Logic();
很多人可能对此有异议Q他们会认ؓ新的对象会把旧的对象冲掉q且释放内存。这里面包含两个问题Q?. 该段代码是先创徏对象然后再进行赋值操作的Q也是说在q期间有两个对象同时存在q就很可能会产生溢出?. q样做也会妨垃圑֛收器的工?BR>较好的写法如?
a=null;
a=new Logic();
虽然ȝ了点但在j2me中还是必要的。接着看下例?BR>drawString("游戏旉:" + time ,50,50,Graphics.LEFT|Graphics.TOP);
"游戏旉:" + time 很完在paint()Ҏ当中每次都被刷一遍显C在屏幕上。危机往往隐藏在美丽的外表Q该语句会引h的内存重新分配来存储 "游戏旉:" + time 而显C完以后又必ȝ垃圾回收器释放,用了双倍时?q且Ҏ发生内存溢出。依此类推在重复执行的方法里应尽量避免重复定义对象。与paint()ҎcM在@环里也有cM的情况存在?
把所有对象的初始化放在构造函数里惛_是再正当不过?大多Ch通常的做法是把当前逻辑所要用到的资源通通初始化完毕?BR>很大一部䆾的内存溢出都是发生在构造函C。内存用的高峰期都是在构造函C所以避开q个高峰能有效的防止溢出。徏议最好的办法是第一ơ用时初始化。如下所C?BR>if (img==null){
//初始?BR>}
现在做游戏很多时候都需要地图数l,声音数组Q还有一些其它资源这些资源很多可以放在代码中也有的可以放在文件当中?BR>强烈这些资源放在文件中需要时在loadq来。这些资源文件如果放在代码中则会占用不小的代码段I间Q而代码一般是E序一q行p载到内存当中?BR>除上面列丄Ҏ外还有一些大家所熟知的顺便一? 比如关闭没用的rms Q关闭没用的|络q接Q关闭没用的。正地停止U程。良好的E序架构减少代码偶合性也是一个不错的ҎQ无论在代码调式Q内存释N可以做到非常清析?BR>
? 囄优化
j2me的内存杀手无疑非囄莫属,一?k的图片可以占?0多k的内存不信大家把load前后的内存剩余打印出来对比看看。所以防止内存溢出最直接的办法就是从囄入手?BR>1Q图片压~? 多数人马上会惛_q个办法。不错这个办法是最有效的。在photoshop里图片制作完成后不要选择 "存储?Q而是选择 "存储?web 所用格? 可以Ҏ里面的选项q行压羃Q特别是颜色q一越越好不q相应的囑փ会有所q。不要认样就完了?BR>实际上该囄q可以再ơ压~,在网上有许多cM的工兗推荐一Ƒ֏以压~png格式的Y?xat.com Image Optimizer 效果不错。经帔R?70% 的压~率且图像不会失真?BR>假如你有多张规格一L囄Q那么徏议你把它做成一张长条图片。有两个原因Q?
1?q样节省存储I间和内存空间。大家可做个试验?0张图片的内容攑֜一张当中对比看看文件大有没有变化?BR>2 ?0张图片需?0个image 对象需要进?0ơio操作费旉不说q浪费内存。当W者发现这个好处时兴奋地把所有图片都存成一张,吱地一声内存又溢出?..原因惛_大家也知?Q图片太大了不要把不同界面的囄整合在一起否则经怼得不偿失?BR>作图时还有一些细节需要注?颜色数量Q分辩率Q图像模式(最好是索引颜色),d大小都会影响到图片大?BR>
三. 工具优化
谁都知道h器是用来保护代码的以加大反编译的隑ֺ(个h认ؓq是在嘲W程序员的智商)。实际上用它来优化程序也是不错的选择Q至有两点好处Q??压羃E序大小。一?0k的程序经常可以压?0k左右?0k的空间对于写低端手机的程序员直是雪中送碳Q多超q?4k限制的游戏都受过它的恩惠Q?、节省内存空间。用脚去想也惛_出来代码了内存里的代码D自然就短了?BR>Ҏl验很多人都会用jb自带的؜淆器RetroGuardQ实际上它效果ƈ不怎么好。推荐用proguard ?http://sf.net 可以免费下蝲Q它可以比retroguard 多压~?? k 以上而且安全性更好?BR>


Alex 2006-02-05 21:23 发表评论
]]>
J2ME开发资?- 优秀站点推荐Q{载) http://www.aygfsteel.com/jiansong/articles/29531.htmlAlexAlexSat, 04 Feb 2006 06:29:00 GMThttp://www.aygfsteel.com/jiansong/articles/29531.htmlhttp://www.aygfsteel.com/jiansong/comments/29531.htmlhttp://www.aygfsteel.com/jiansong/articles/29531.html#Feedback0http://www.aygfsteel.com/jiansong/comments/commentRss/29531.htmlhttp://www.aygfsteel.com/jiansong/services/trackbacks/29531.htmlJ2ME开发站点资源:

英文Q?BR>
http://java.sun.com/j2me/index.jsp
SUN公司J2MEq_的官方站点,许多权威资料都可以在此找到?BR>

http://jcp.org/en/jsr/tech?listBy=1&listByType=platform
J2MEq_的所有JSR规范Q这是jcp的官方站炏V?BR>

http://www.microjava.com
非常全面的j2me开发站点,内容丰富Q包括各U示例,q能扑ֈ许多讑֤的资料?BR>

http://www.onjava.com/topics/java/Wireless_Java
O'Reilly onjava的j2me版,以文章教Eؓ丅R?BR>

http://www.corej2me.com/
以书cؓȝj2me站点


http://www.wirelessdevnet.com/
又一个教E?下蝲都很丰富的j2me开发站?BR>

http://www.mobilegd.com/
主要以J2ME游戏开发ؓȝ站点


中文Q相对于英文站点Q国内专注于J2ME的技术站点还特别,重点推荐以下站点Q?BR>
http://www.j2medev.com
国内最大的专注于J2ME开发的开发者站点,以原创文?教程/应用游戏下蝲ZQ值得推荐Q?BR>

http://www-128.ibm.com/developerworks/cn/java/index.html
IBM开发者社Z有不不错的J2ME教程?BR>

http://j2me1.motorola.com.cn/index_ch.asp
MOTO的中文开发站点,可以下蝲到moto的SDK


各大手机厂商的开发站点:

Nokia: http://www.forum.nokia.com
Moto: http://www.motocoder.com
Sony-Ericcson: http://developer.sonyericsson.com/site/global/home/p_home.jsp


手机应用下蝲/手机游戏下蝲Q?BR>
http://www.imobile.com.cn/
手机之家


http://www.mbook.com.cn
掌上书院


Alex 2006-02-04 14:29 发表评论
]]>
J2MEE序开发新手入门九大要点(转蝲Q?http://www.aygfsteel.com/jiansong/articles/29529.htmlAlexAlexSat, 04 Feb 2006 06:28:00 GMThttp://www.aygfsteel.com/jiansong/articles/29529.htmlhttp://www.aygfsteel.com/jiansong/comments/29529.htmlhttp://www.aygfsteel.com/jiansong/articles/29529.html#Feedback0http://www.aygfsteel.com/jiansong/comments/commentRss/29529.htmlhttp://www.aygfsteel.com/jiansong/services/trackbacks/29529.htmlJ2ME中需要的Java基础知识

  现在有大部分人,都是从零开始学J2ME的,学习J2ME的时候,L从Java基础开始学习,而且现在讲Java基础的书c中都是以J2SE来讲基础Q这q学习造成了一些不必要的麻烦,下面J2ME中用到的和不需要的Java基础知识做一个简单的说明?BR>
  J2ME中用到的Java基础知识Q?BR>
   1、Java语法基础Q包括基本数据类型、关键字、运符{等

   2、面向对象的思想Q类和对象的概念Q承和多态等{?BR>
   3、异常处?BR>
   4、多U程

  J2ME中没有用到的Java基础知识Q?BR>
   1、JDK中javac和java命o的?

   2、Java基础中的很多cdJ2ME中没有,或者类中的Ҏ做了大量的精。所以徏议在J2ME中熟悉类库?BR>
   3、Applet、AWT、Swingq些知识在J2ME中根本用不到?BR>
  单说q么多,希望学J2ME的朋友们能少C些弯路,不之处希望大家U极指正和补充?

  二、J2ME中暂时无法完成的功能

  列一些J2ME中暂时无法完成的功能Q希望大家能U极补充Q?BR>
   1、在手机中不更改代码实现ULQ主要指游戏?BR>
   2、动态修Ҏ钮文字?BR>
   3、在Canvas上接受中文输入?BR>
   4、操作本地资源、例如地址本、已收短信息{?BR>
   5、制作破坏性的手机病毒?BR>
   6、其他等待大家来补充?BR>
  三、J2ME的跨q_?BR>
  J2ME技术源于JavaQ所以也hJVM的优势,可以在支持Java的^Cq行ULQ但是现在的J2ME技术在跨^C却做的很p糕Q我们来单看一下原因:

  1、手机的屏幕寸不一Q?BR>
  q个主要在界面制作上。如果你使用的是高用户界面Q比如你做的是应用开发或者用L陆、用h册这L通用功能Ӟ一般没有什么问题?BR>
  如果你用的是低U用L面,比如你做的是游戏Q那么你需要考虑q个问题了?BR>
  2、厂商的扩展API不统一Q?BR>
  例如Nokia的扩展APIcdUIpdQ在别的手机上或者没有实玎ͼ或者包名不同等{?BR>
  3、手机^C实现的bugQ?BR>
  例如Nokia?650在实现双~冲上有bugQ那么在q种机型上运行的软g׃能用双~冲。其他NOKIA上的一些bugQ可以参看:http://blog.csdn.net/Mailbomb/archive/2005/03/24/329123.aspx

  4、手机性能问题?BR>
  不同手机的可用内存、最大jar文g都有要求Q例如Nokia S40的大部分手机支持的最大jar文g?4KQ最大可用内容ؓ210K?BR>
  所以现在的手机软gQ特别是游戏都提供支持的机型列表Q也才有了手机游戏移植h员的存在?BR>
  四、学习J2ME可以从事的工作种c?BR>
  现在J2ME技术可以说相当的火_q里介绍一些学好了J2ME之后可以从事的工作的U类Q?BR>
  1、J2ME游戏开发h?BR>
  Ҏ游戏{划或者文档要求,在某U特定的机型(以Nokia S40或S60居多)开发游戏程序。这是现在大部分J2MEE序员从事的工作?BR>
  需要熟l掌握:高用户界面、低U用L面、线E,如果是网l游戏,q需要熟l网l编E?BR>
  2、J2ME应用开发h?BR>
  现在?A class=bluekey target=_blank>Ud应用q不是很多,但是q是出现了一些,特别是移动定位以及移动商务相关的内容。需要熟l掌握:高用户界面、线E和|络~程?BR>
  3、J2ME游戏UL人员

  参照源代码,可以在一个^C可以q行的游戏移植到其他q_上去。例如将Nokia S40的游戏移植到S60上,或者烦qT618{等。主要是控制屏幕坐标Q有些可能需要替换一些API?BR>
  需要熟悉各q_之间的差异以及相关的技术参敎ͼ比如屏幕大小、最大jar文g寸{等?BR>
  五、J2MEE序设计的几个原?BR>
  1、用面向对象编E?BR>
  虽然使用面向q程~程可以减小文g的尺寸,但是Z以后l护的方便和利于扩展Q还是要使用面向对象~程?BR>
  2、用MVC模式

  模型、界面和控制分离。现在很多的E序三者合一Q但是如果你做的E序比较大的话,q是你进行分R?BR>
  3、自动存储用戯?BR>
  使用RMS来存储用L信息Q例如存储用户上ơ输入的用户名、密码、用户对于系l的讑֮{,q样不仅可以减少用户的输入,而且对用户友好。很多程序甚臛_了自动登陆等?BR>
  4、一些系l设|允许用户关闭。如背景音乐、背景灯昄{?BR>
  5、将低用户界面的绘制动作放在一个独立的U程里面厅R?BR>
  6、在需要大量时间才能完成的工作Ӟl用户一个等待界面?BR>
  六、从模拟器到真机试

  对于J2ME开发者来_模拟器给我们带来了很多方便,比如可以在模拟器中调试程序以及很方便的察看程序的效果Q但是模拟器也给我们带来了一些问题,比如模拟器实现的bug{等Q所以进行真机测试是必须的?BR>
  1、ؓ什么要q行真机试Q?BR>
  因ؓ模拟器程序可能存在bugQ以及真机的性能有限Q所以必进行真机测试?BR>
  2、如何将E序传输到机器中Q?BR>
  程序传输到机器中有如下方式Q?BR>
   a) OTA下蝲

   b) 使用数据U传?BR>
   c) U外传输

   d) 蓝牙

  你可以根据条Ӟ选择合适的方式?BR>
  3?真机试主要什么?

  真机试的内容很多,主要试以下几个斚wQ?BR>
   a) E序的功?BR>
   b) E序的操作性,是否易操?BR>
   c) E序的大?比如Nokia S40pd的手机大部分接受的最大文件尺ؓ64K

   d) E序q行速度Q速度是否可以忍受?BR>
  七、从WTK到厂商SDK

  对于J2ME爱好者来_基本上大安是从SUN的WTK(J2ME Wireless Toolkit)开始的Q但是对于实际应用来_仅仅使用WTK是远q不够的Q所以在学习q程中,必须完成从WTK到SDK的跨?BR>
  1、厂商SDK的下载地址Q?BR>
  ·Nokia

  Nokia不愧为手业的老大Q对于j2me的支持也是一的Q有专门的网站提供SDK和各U文档说明?BR>
  |址是:http://forum.nokia.com.cn/sch/index.html

  ·Siemens

  Siemens对于J2ME的支持也不错Q它提供了SDKQ模拟器需要独立安装。下载地址如下Q?BR>
  https://communication-market.siemens.de/portal/main.aspx?LangID=0&MainMenuID=2&LeftID=2&pid=1&cid=0&tid=3000&xid=0

  ·SonyEricsson

  SonyEricsson SDK以及自己的模拟器Q下载地址为:

  http://developer.sonyericsson.com/site/global/docstools/java/p_java.jsp
  http://mobilityworld.ericsson.com.cn/development/download_hit.asp

  ·Motorola

  Motorola提供了专门的SDKQ内部包含模拟器Q下载地址为:

  http://www.motocoder.com/motorola/pcsHome.jsp

  ·SamSung

  SamSung也提供了专门的SDK和模拟器Q下载地址为:

  http://developer.samsungmobile.com/eng/front_zone/bbs/bbs_main.jsp?p_menu_id=1500

  ·NECQ?BR>
  NEC也提供了集成模拟器的SDKQ下载地址为:

  http://www.nec-mfriend.com/cn

  2、厂商SDK和WTK有什么不同?

  厂商SDK最单的理解是在WTK的基上增加了自己的模拟器和自q扩展API。也是_你在使用厂商的SDKӞ可以使用厂商的扩展类库,例如Nokia的UIcdQ和厂商自己的模拟器而已。每个厂商的扩展API都不多,而且不尽相同?BR>
  3、如何用?

  有些厂商SDK的用都和WTK相同Q例如SamSung。Nokia提供了独立的界面来开发,但是q个界面在实际开发中使用不多?BR>
  4、厂商SDK的问?BR>
  厂商SDK实现q程中,有一些bugQ而且和真机实C一致。例如NOKIA的؜xN题等{?BR>
  八、在J2ME中获得手机IMEI的方?BR>
  IMEI是Internation mobile entity identification的简Uͼ在手Z输入*#06#可以昄该数字,长度?5位,全球唯一Q永q不会冲H,所以可以作别用L一个标志?BR>
  下面是在J2ME中获得IMEI的方法:

  1?A class=bluekey target=_blank>MOTOpd的手机可以通过dpȝ的IMEI属性获得,代码如下Q?BR>
   String imei = System.getProperty("IMEI");

  2、SIEMENSpd的手机可以通过dpȝ的com.siemens.IMEI属性获得,代码如下Q?BR>
   String imei = System.getProperty("com.siemens.IMEI");

  九、J2ME|络q接中显C问题的解决办法

  在网l编E中Q有些时候会出现一些在没有接收到网l数据就昄界面的,造成界面昄不符合要求(例如公告昄Q会先显C公告的背景囄再显C公告信息)Q这里提一个简单的解决办法l大Ӟ

  解决q种情况的方法分成三个步骤:

  1、在需要显C的界面中,调用发送网l数据的Ҏ。每ơ显C时调用该构造方法,不调用Display的setCurrentҎ昄?BR>
  2、显C等待界?例如q度条等)Q给用户提示Q在q行|络q接?BR>
  3、在处理|络反馈的数据完以后Q调用Display的setCurrentҎ昄昄当前界面?BR>

Alex 2006-02-04 14:28 发表评论
]]>
采用 Marv The Miner ?J2ME MIDP 讑֤破碎教程Q{载) http://www.aygfsteel.com/jiansong/articles/29530.htmlAlexAlexSat, 04 Feb 2006 06:28:00 GMThttp://www.aygfsteel.com/jiansong/articles/29530.htmlhttp://www.aygfsteel.com/jiansong/comments/29530.htmlhttp://www.aygfsteel.com/jiansong/articles/29530.html#Feedback0http://www.aygfsteel.com/jiansong/comments/commentRss/29530.htmlhttp://www.aygfsteel.com/jiansong/services/trackbacks/29530.html
  • 如何现有分D늚 MIDP 目UL?NetBeans
  • 如何使用 IDE 的内|设备破解x?

本教E用的CZE序是流行的 J2ME 游戏 "Marv The Miner"Q这是在 GPL 下发布的E序Qƈ且编写ؓ在几个不同的Udq_上运行?

完成本教E大U需要两个小时的旉Qƈ且包括以下主题:

  • 从现?MIDP 目导入源?
  • 创徏和定制每个分?Jar 的项目配|?
  • 标记特定于每个配|的源代码段?
  • 为项目生成几个分?Jar?
  • 通过 IDE 使用外部仿真器?

要完成本教程Q您需?MarvTheMiner_120_all.zip 文gQ该文g包含此程序的原始源文件。单?A >此处Q下载“Marv the Miner v1.2.0Q包括别编辑器Q”,以获得源文g?

  1. 讄环境
  2. 获取所需源文?/FONT>
  3. ?NetBeans 中开?Marv The Miner 应用E序
  4. 生成和执?Marv the Miner 应用E序
  5. 深入探讨配置
  6. 使用不符?UEI 的仿真器q_

讄环境

此节介绍如何在开始本教程之前对系l进行设|?

获取q安装所需软g

CZ所需的Y件如下:

  • 带有 NetBeans Mobility Pack 4.0 ?FCS ?NetBeans?集成开发环?(IDE)?BR>您可以从 NetBeans 下蝲站点获得此YӞhttp://www.netbeans.org/downloads/index.html
  • Java?2 软g开发工具包标准?(J2SE?SDK), v. 1.4.2 或更高版?BR>您可以从以下站点获得 J2SE SDKQ?A onclick="window.open('http://java.sun.com/j2se/downloads.html')" >http://java.sun.com/j2se/downloads.html
  • J2ME?Wireless Toolkit 2.0 或更高版?BR>J2ME Wireless Toolkit ?NetBeans Mobility Pack 一起安装。您q可以从以下站点获得 Wireless ToolkitQ?A onclick="window.open('http://java.sun.com/products/j2mewtooklit/index.html')" >http://java.sun.com/products/j2mewtooklit/index.html?
  • 用于 Symbian OS ?Nokia Series 60 SDK
    可以从以下站点获得:http://www.forum.nokia.com/main/0,6566,034-483,00.html
  • SDK 可用于以下一U或多种产品QNokia Series 40、Nokia Series 80、Nokia Series 90、Motorola SDK4.1 for J2ME GA、Vodafone
    • 您可以从以下站点获得 Motorola SDK4.1 for J2ME GAQ?A onclick="window.open('http://www.motocoder.com/motorola/pcsHome.jsp?node_name=SDK')" >http://www.motocoder.com/motorola/pcsHome.jsp?node_name=SDKQ需要注册)
    • 您可以从以下站点获得 Nokia SDKQ?A onclick="window.open('http://www.forum.nokia.com/main/1,6566,030,00.html')" >http://www.forum.nokia.com/main/1,6566,030,00.html。在“按技术领域查看工具”下拉框中选择 Java?
    • Vodafone SDK 只可用于全球合作伙伴Q不能通过单的联机注册获得?

使用下蝲站点提供的说明安装该软g?/P>

    启动 IDE

    要启?NetBeans IDEQ请执行以下操作Q?/P>

      • ?Microsoft Windows ?BR>选择“开始?gt;“程序?gt;“NetBeans版本?gt; "NetBeans IDE"?
      • ?UNIX ?Linux 环境?BR>在终端窗口中Q键?sh IDE-install-path/bin/runide.sh

    IDE-install-path 变量代表 IDE 起始目录的\径?/P>

    获取所需源文?/STRONG>

    MarvTheMiner_120_all.zip 文g包含原始 Marv The Miner 应用E序的源文g。该 zip 包括一?MarvTheMiner 目录Q其中包含您在本教E中使用?src ?res 子目录?/P>

    要解压羃 MarvTheMiner_120_all.zip 文gQ请执行以下操作Q?

    1. 在您的文件系l中Q创Z个时位|,用于攄 MarvTheMiner_120_all.zip 的内宏V?BR>例如Q在本教E中Q该目录指的?C:\temp 目录?
    2. 使用用于解压~文件的应用E序?MarvTheMiner_120_all.zip 文g解压~到 temp 目录?BR>temp 目录现在拥有 MarvTheMiner 目录Q其中包含以下文件和子目录:
      文g或子目录
      描述
      src 构成 Marv The Miner E序的源文g?/TD>
      res 包含该程序所使用的资源文件。其中包括图Q以及用于定义游戏别布局?.map 文g?/TD>
      MarvEditor U别~辑器(不在本教E的讨论范围之内Q?/TD>
      Nokia.full 该游戏的 Nokia 生成形式?/TD>
      MIDP.full 该游戏的一?MIDP 生成形式?/TD>

    3. ?res 目录Ud?C:/temp/MarvTheMiner_120_all/src/。ؓ了在创徏新的 NetBeans 目之后保资源文g保持正确的相对\径,可以使用q种单的解决Ҏ?

    ?NetBeans IDE 中开?Marv The Miner 应用E序

    本节介绍如何?NetBeans IDE 中设|和使用现有目源?/P>

    导入现有?/H3>
    创徏目

    W一步是?NetBeans IDE 中创Z个新目?/P>

    1. 从主菜单中选择“文件?gt;“新建项目”?BR>显C“新建项目”向对{?
    2. 在“类别”列表中选择“移动”。然后选择“来自现?MIDP 源的Ud目”,q单几Z下一步”?
    3. 如果未用安装程序安?NetBeansQ则此处显CZ个面板,指导您安装移动^台。按照说明执行操作,q安装某些版本的 Wireless Toolkit。然后单几Z下一步”?
    4. 对于“导入的源的位置”,单击“浏览”按钮ƈDx?A >解压~?/FONT> MarvTheMiner_120_all.zip 文g时创建的 C:/temp/MarvTheMiner_120_all/src 目录。选择 src 目录Q然后单几Z打开”。单几Z下一步”?
    5. 输入新项目的名称。例如,其命名?MarvTheMiner?
    6. 现在Q选择新项目目录所在的目录。确保已选中“设|ؓ主项目”复选框Qƈ单击“完成”?BR>创建新目 MarvTheMinerQƈ且显C在 IDE 的“项目”标{中?
    7. 展开 MarvTheMiner 栚w目节点,以查看该目的源和资源。展开 <~省?gt; 节点Q然后双?Main.javaQ以在编辑器中打开该文件?

    创徏目配置

    NetBeans 讑֤破碎解决ҎZ?EM>目配置的用。对于一个项目而言Qؓ该项目创建的每个分发 Jar/Jad 都应该拥有一个项目配|?

    如果您检查文?Main.javaQ将看到作者支持具有(Nokia ?FullCanvasQ和 Class.forname() 注释l合的多个^台。同时还定义了变?vendorQ该变量用于跟踪q行应用E序的电话。根据此信息Q您可以看到他们支持五组不同的电话:

    • Nokia Series 60
    • 其他 Nokia 产品
    • Motorola
    • Vodafone
    • 其他

    同样Q您创建四个配|来处理q些分发之间的差异?/P>
    创徏配置
    1. 右键单击 MarvTheMiner 目节点Qƈ选择“属性”?BR>此时打开“项目属性”页面,用于控制目多方面的内容?
    2. 单击该页剙的“管理配|”按钮。此时将打开“管理配|”对话框?
    3. 单击“添加”,然后键入 NokiaSeries60 q按“确定”?
    4. 对于 Motorola?CODE>Vodafone ?NokiaOther 重复前面的步骤。单几Z关闭”可关闭“管理配|”对话框?

    位于“项目属性”页剙的“项目配|”组合框现在应该包含五种配置。我们马上会使用q些讄Q但是现在要?IDE d一些仿真器?/P>

    ?IDE d仿真?

    要用已l安装在计算Z的仿真器q_q行目Q首先必d IDE 中进行注册?/P>

    1. 在“项目配|”组合框中选择 "DefaultConfiguration"Q然后选择“^台”节炏V单几Z管理仿真器”按钮。将出现“^台管理器”对话框?

      h意,q可以从“工具?gt;“Java q_理器”的主菜单访问该对话框?

    2. 单击“添加^台”,q导航至安装 Nokia Series 60 仿真器的目录。单几Z下一步”?
    3. 保仿真器设|检正,然后单击“下一步”?
    4. 如果需要,在此您可以指向该仿真器的源文件和 javadoc 文g。否则,只需单击“完成”,以完成该q_的安装?
    5. 对于您的机器上已l安装的每个仿真器^収ͼ以及要通过 IDE 使用的每个仿真器q_重复q些步骤?/P>

      h意,IDE 只能到W合 UEI 标准的仿真器。遗憄是,q意味着不能开发h员用?Marv The Miner ?Motorola 7.5 仿真器。本教程后面的章?/FONT>介l通过 IDE 使用不符?UEI 的仿真器的解军_法?

    针对配置定制目讄

    可以针对每个目配置单独定制“项目属性”页上的每个面板。缺省情况下Q配|将使用在缺省配|中定义的设|?

    1. 打开“项目属性”页Qƈ选择“^台”面ѝ确保在“项目配|”组合框中选中 "DefaultConfiguration"?
    2. 在“仿真器q_”组合框中选择 "J2ME Wireless Toolkit 2.x"。将单选按钮切换ؓ CLDC-1.0 ?MIDP-2.0?BR>~省情况下,所有配|将使用此仿真器来生成和执行目。然而,qƈ不是我们惌的结果,因ؓ代码引用几个特定于^台的库?
    3. 从“项目配|”组合框中选择 NokiaSeries60 配置?BR>“^台”面板现在完全灰显。这是因为当前对此面板?"DefaultConfiguration" 中的倹{?
    4. 取消选中该面杉K部的“?"DefaultConfiguration" 中的值”复选框?BR>该面板中的所有元素现在将处于启用状态。从“仿真器q_”组合框中选择 Series 60 MIDP Concept SKD Beta 0.3.1 Nokia q_?

      如果在各个配|之间进行切换,您将看到Q现在除?NokiaSeries60 配置之外Q所有配|都使用?DefaultConfiguration 中指定的倹{如果您更改了“DefaultConfiguration q_”面板中的Q何配|设|,所做的更改传播到?NokiaSeries60 之外的所有配|?/P>

    5. 在“项目配|”组合框中选择 "NokiaOther" 配置。取消选中“?"DefaultConfiguration" 中的值”复选框Qƈ选择一个您安装的其?Nokia q_?
    6. 也可以针?Vodafone q_重复q些步骤?
    7. 如上所qͼMotorola 7.5 仿真器不W合 UEIQ因此不能安装到 IDE 中。然而,Zq行~译Q我们仍然可以指向其 API。激z?Motorla 配置Qƈ选择“库和资源”面ѝ?
    8. 取消选中“?"DefaultConfiguration" 中的值”复选框?
    9. 单击“添?Jar/Zip”,q导航至 {motorola 安装目录}\Emulator7.5\lib。选中每个 .zip 文gQ?Ctrl+ 鼠标Q,然后单击“打开”?
    10. 单击“确定”退出项目属性。现在您已经完成目配置的创ZQ务?
    为每个配|创建定制代码块

    讑֤破碎解决Ҏ的第二部分是能够指定源文件中的某些代码块Q以使其特定于一个或多个配置。通过使用右键单击~辑器上下文菜单中的操作或通过“编辑?gt;“预处理E序块”菜单可以完成此d?/P>

    1. 打开 Main.javaQƈ?initStaticData() Ҏ。此处,该方法确定在q行时中哪些特定于设备的 API 可用Qƈ随后执行相应的操作。这是一个非常智能的解决ҎQ可以解册备破某些部分的问题。遗憄是,该解x案也存在会添加分?Jar 的大,从而媄响运行时性能及提高源复杂性的问题Qƈ且不能解x有分D问题(您随后会看到q一点)?

      以下?initStaticData() 的相关部分:

      vendor = 0;
      try
         {
      // Nokia
      Class.forName("com.nokia.mid.sound.Sound");
      vendor = 1;
      try
             {
      Class.forName("com.nokia.mid.ui.DeviceControl");
      com.nokia.mid.ui.DeviceControl.setLights(0,100);
      vendor = 2;
             }
      catch(Exception ex2){}
         }
      catch(Exception ex){}
      
      try
         {
      // Vodafone
      Class.forName("com.vodafone.v10.system.device.DeviceControl");
      com.vodafone.v10.system.device.DeviceControl.getDefaultDeviceControl().
      setDeviceActive(com.vodafone.v10.system.device.DeviceControl.BACK_LIGHT,
      true);
      vendor = 3;
         }
      catch(Exception ex){}
      
      try
         {
      // Motorola
      Class.forName("com.motorola.multimedia.Vibrator");
      Class.forName("com.motorola.multimedia.Lighting");
      com.motorola.multimedia.Lighting.backlightOn();
      vendor = 4;
         }
      catch(Exception ex){}
                          
    2. 删除所有只涉及定E序在哪个设备上q行的功能,因此剩下的代码如下:
       // Nokia
      com.nokia.mid.ui.DeviceControl.setLights(0,100);
      
      // Vodafone
      com.vodafone.v10.system.device.DeviceControl.
      	getDefaultDeviceControl().
      	setDeviceActive(com.vodafone.v10.system.device.DeviceControl.BACK_LIGHT,
      			true);
      
      // Motorola
      com.motorola.multimedia.Lighting.backlightOn();
                          

      现在您拥有与不同配置兌的三个代码块?

    3. H出昄特定?Motorola 的行Q然后右键单ȝ辑器Qƈ选择“预处理E序块?gt; "Motorola"?
    4. 对于 Vodafone 块重复此步骤Q“预处理E序块?gt; "Vodafone"Q?
    5. 对于 Nokia 代码Q选择“预处理E序块?gt;“管理预处理E序块”?BR>此时打开“管理预处理E序块”对话框?
    6. 选择 "NokiaOther" ?"NokiaSeries60" 的选项Q然后单几Z确定”?

      q些代码块现在与预处理程序块的页眉和脚中列出的配置相关联。如果活动配|是预处理程序块늜和页脚的一部分Q则更改目的活动配|将触发一个预处理E序Q该E序注释或注释掉所Z的块?/P>

    7.  通过使用dh中的l合框可更改目的活动配|?BR>q可以通过从主“生成”菜单中的相同菜单右键单击项目节?>“设|活动项目配|?gt; 选择配置Q或通过切换dh中的“配|”组合框Q如果项目当前是主项目)来完成此操作?BR>
      h意,代码块突出显C的颜色发生变化,以标识哪些块处于zd状态,哪些块处于非zd状态。活动配|名UC在代码块的늜/脚中突出显CZ个不同的颜色?
    8. ?beep() Ҏ中删?class.forName() 的所有实例。如果还要精 if 块,则剩下以下代码:
      if (midlet.muteSound == 0)
      {
      // Nokia 3650, 7650
      com.nokia.mid.sound.Sound sound = new com.nokia.mid.sound.Sound(1000,100);
      sound.play(1);
      // All other Nokias
      com.nokia.mid.sound.Sound sound = new com.nokia.mid.sound.Sound(1000,100);
      sound.play(1);
      
      }
      
      if (midlet.useVibra == 1)
      {
      // Nokia
      com.nokia.mid.ui.DeviceControl.startVibra(50,500);
      // Vodafone SDK
      com.vodafone.v10.system.device.DeviceControl.
      	getDefaultDeviceControl().
      		setDeviceActive(
      			com.vodafone.v10.system.device.DeviceControl.VIBRATION,
      			true);
      vibra_delay = 10;
      
      // Motorola 7.5
      com.motorola.multimedia.Vibrator.
      	setVibrateTone(
      		com.motorola.multimedia.Vibrator.VIBRATE_LONG);
      com.motorola.multimedia.Vibrator.vibrateFor(500);
      
      }
      

      您应该能够将每个块与正确配置相关联。切记将 Nokia 振动控制调用与两?Nokia 配置相关联?/P>

    9. run() Ҏ也包含特定于 Vodafone 的调用。删?try/catch 块,q将q两行与 Vodafone 配置相关联?

      我们马上p完成d了。最后一步是以某U方式来处理 Nokia ?FullCanvas?

    10. Ȁz?NokiaSeries60 配置?
    11. 右键单击 FullCanvas 声明Qƈ选择“创?If/Else E序块?NokiaSeries60)?
    12. 右键单击W一个块Qƈd NokiaOther?
    13. 右键单击W二个块Qƈd NokiaOther?
    14. W二个块是倒置的块。将此倒置的块cd义更改ؓ extend Canvas?

    完成后,cd义如下:

    生成和执?Marv the Miner 应用E序

    生成和执行应用程?/STRONG>

    此时Q我们应该能够针Ҏ有配|编译和q行该程序。单M工具栏上的Q何图标将Ҏ动配|执行所选的操作?

    1. 在主菜单中,选择“生成?gt;“生成所有主目配置”?BR>假设所有项目均已正设|,现在应该可以生成所有配|了?

      如果您不能访问包含正?API 的一个或多个仿真器^収ͼ则此步骤可能p|。如果出现这U情况,您应该手动注释掉M对不存在?API q行的调用?

      如果您未按照q些步骤手动安装不符?UEI 的仿真器一?/FONT>中描q的 Motorola 仿真器,则针?Motorola 配置的预校验失败。ؓ了在不手动添加仿真器的情况下q行此配|的~译Q您可以注释掉所?motorola API 调用Qƈ从“库和资源”面板中删除 motorola 库?/P>

    2. 选择 IDE 左上方的“文件”标{,q展开 dist 文g夏V在此文件夹中,您应该拥有包含每个已成功生成配置?Jar/JAD 的目录,以及代表 DefaultConfiguration 生成?Jar/Jad?
    3. ?F5 可采用当前选定的配|运行该E序。您可以切换配置Qƈ再次?F5Q同时运行该E序的多个版本?

      5. 深入探讨配置

      通过本教E,您可以熟l掌握如何将现有 MIDP 目导入?NetBeans 环境中,但是它ƈ未将 IDE 解决的所有设备破问题全部列出。以下列举了一些常见问题的更多CZ及如何通过 IDE 来解冟?

      • 目属性页中的每个面板都是特定于配|的Q“一般”页除外Q。从而ؓ您提供了极大的灵zL。例如,对于每个配置唯一命名的(“创?Jar”面板)分发 JarQ您可以拥有不同?MIDlet-Version |“应用程序描q符”面板)?
      • 在设|项目之间的相关ҎQ特别是在用“项目配|”时Q应保在“选择目”对话框的“项?Jar 文g”列表框中选择正确的输?jar。将昄所选项目中每个配置的项?Jar?

        例如Q您拥有两个目 MyLibrary ?MyApplicationQ这两个目均包含两个配|?ReleaseConfiguration ?DebugConfigurationQ则可以执行以下步骤来设|正的相关:

        • 打开 MyApplication 的“项目属性”。在“项目配|”组合框中选择 "ReleaseConfiguration"?
        • 选择“库和资源”面板,然后单击“添加项目”按钮?
        • D?MyLibrary 目的位|。“项?Jar 文g”列表框现在包含三个目 Jar。在路径 dist/ReleaseConfiguration/ 中选择其中之一Q然后单几Z添加项?Jar 文g?
        • 切换?DebugConfigurationQƈ重复q些步骤Q除非此时添加位?dist/DebugConfiguration/ 中的目 jar?

        q是在进行配|时讄目之间相关Ҏ采用的方式?

      • 该解x案是 VCS 友好型的。所有源文g始l保存到盘驱动器上Q就好像已选中 DefaultConfiguration 一栗从而可以防止在 VCS 入期间发生冲H,或由于拥有不同的zd配置而导致更新。还要确保共?project.properties 文gQ位?{projecthome}/nbprojectQ!
      • 可以通过命o行来q行目Q而不用?IDE。只需在项目v始目录中键入 ant runQ项目就会用活动配|运行。通过键入 ant run -Dconfig.active={config_name}Q您可以不同的配置传递到 ant 脚本
      • 使用现有预处理程序解x案的目应该易于导入。虽?NetBeans 预处理程序相比之下不太复杂,但是却可以用提供的指o表达M情况?
      • 使用“库和资源”面板或“过滤”面板可以决定应该将哪个版本的资源部|到分发 Jar?
        • 库和资源Q创Z?Jar 文g的多个版本(该文件包含应用程序的所有资源)Q然后指向每个配|正的 Jar 版本。因此您可能拥有 3 ?jarQ?CODE>large_res.Jar?CODE>medium_res.Jar?CODE>small_res.JarQ其中每?Jar 文g都包含同名但解决方式不同的资源。然后指向正版本的 Nokia_large、Nokia_med、Nokia_small 配置?
        • qoQ包括直接位?src 目录中或该目录之下的资源Q然后用“过滤”树来控制分?Jar 中包含的资源版本?

      使用不符?UEI 的仿真器q_

      虽然 IDE 只能自动符?UEI 规范的第三方仿真器^収ͼ但是仍然可以使用不符?UEI 的仿真器。本节介l具体操作方式?/P>

    1. d不符?UEI 的仿真器
      1. ?userhome 目录中(?Windows 中的~省位置?C:\Documents and Settings\{username}\.netbeansQLinux 中的~省位置?/home/{username}/.netbeansQ,?{userhome}\config\Services\Platforms\org-netbeans-api-java-Platform 目录?BR>此目录包含定义已安装仿真器^台的 xml 文g。您可以ZW合 UEI 的Q何仿真器手动创徏q些文g。可以在以下|址扑ֈ?xml 文g?DTDQ?A >http://www.netbeans.org/dtds/j2me-platformdefinition-1_0.dtd
      2. 以下文件保存ؓ SDK_4.1_MRI_7.5.xmlQ以使用本教E所需?Motorola 7.5 仿真器。请注意Q?&quot; 是有一定作用的Q应按原样保存?
        <?xml version='1.0'?>
        <!DOCTYPE platform PUBLIC '-//NetBeans//DTD J2ME PlatformDefinition 1.0//EN'
        	'http://www.netbeans.org/dtds/j2me-platformdefinition-1_0.dtd'>
        <platform name="Motorola_7_5"
        home="C:\WTK\Motorola\SDK v4.1 for J2ME\Emulator7.5"
        type="custom"
        displayname="Motorola 7.5"
        srcpath=""
        preverifycmd="&quot;{platformhome}/bin/preverify.exe&quot;
        	-classpath &quot;{classpath}&quot; -d &quot;{destdir}&quot;
        	&quot;{srcdir}&quot;"
        runcmd="">
        <device name="Motorola_7_5" securitydomains="trusted,untrusted"
        	description="Motorola_7_5">
        <configuration name="CLDC" version="1.1" displayname="CLDC"
        	classpath="${platform.home}/lib/cldc.zip"
        	dependencies="" default="true"/>
        <profile name="MIDP" version="2.0" displayname="MIDP"
        	classpath=";${platform.home}/lib/midp.zip"
        	dependencies="" default="true"/>
        </device>
        </platform>
        

        保存?XML 文g之后Q需要重新启?IDE。完成操作之后,可以选择 Motorola 7 5 作ؓq_Q而选择 Motorola_7_5 作ؓ讑֤。您应该?Motorola 配置与这个新的^台相兌。请注意Q您可能需要删?{userhome}\var\cache 中的~存文gQ以便检到手动安装的^台。此外,不应删除也可能位于此处的 mdrstorage 文g夏V?

        注意 runcmd Ҏ设|ؓI字W串。这是因为启动此 Motorola 仿真器的命o?MIDlet 作ؓ其参C一来执行。这?UEI 标准截然不同QIDE 中不能提供直接支持。但?..

        • 如果您所使用的仿真器q_所需的信息不会比提供l?UEI 仿真器的信息要多Q则可以跌此步骤。以下信息将提供l?UEI 仿真器:
          • 安全?
          • q_cd
          • q_起始目录
          • Jad 位置
          • Jad 目标目录/Jad 名称

        如果您的仿真器需要额外信息(如项?Jar 的位|或要执行的 MIDlet 的名UͼQ则通过修改位于目起始目录中的 build.xml 文g可以执行仿真器?

        此文件控制所有项目操作。我们在此可以创Z个新目标Q该目标不仅可以执行 motorola 仿真器,如果?Motorola 配置上调用运行操作,则还可以传递所有适当的数据?/P>

        向项目的 build.xml d以下代码Q?/P>

        <target description="Run MIDlet suite." depends="init" name="run">
        <condition property="run.motorola">
        <!-- arg2 must match the configuration name
            you would like to use the special emulator -->
        <equals arg1="${config.active}" arg2="Motorola"/>
        </condition>
        <ant inheritrefs="true" inheritall="true" target="run_normal"/>
        
        <ant inheritrefs="true" inheritall="true" target="run_motorola"/>
        
        </target>
        
        <target description="Run MIDlet suite the normal way." depends="init"
        	name="run_normal" unless="run.motorola">
        
        	<nb-run commandline="${platform.runcommandline}"
        	securitydomain="${evaluated.run.security.domain}"
        	execmethod="${run.method}" platformtype="${platform.type}"
        	platformhome="${platform.home}" device="${platform.device}"
        	jadurl="${dist.jad.url}" jadfile="${dist.dir}/${dist.jad}"/>
        </target>
        
        <target description="Run MIDlet suite for motorola's non-UEI emulator."
        	depends="init" name="run_motorola" if="run.motorola">
        <property name="project.home" location="."/>
        
        <!-- the last arg line contains an value "Miner".
            This must match the name of the midlet you want to execute  -->
        <java dir="${platform.home}/bin"
        fork="true"
        classname="com.mot.tools.j2me.emulator.Emulator"
        classpath="${platform.home}/bin/Emulator.jar;${platform.home}/bin/configtool.jar">
        <jvmarg value="-Djava.library.path=${platform.home}/lib"/>
        <arg value="-classpath${project.home}/${dist.dir}/${dist.jar}"/>
        <arg line="-deviceFile"/>
        <arg value="${platform.home}/bin/RESOUR~1/T720I~1.PRO"/>
        <arg line="javax.microedition.midlet.AppManager Miner -JSA 1 1"/>
        </java>
        
        </target>
        
        

        因此Q只要活动配|是 MotorolaQ就会运?run_motorola 目标。否则,调?run_normal 目标Q用正总真器执行E序Q?

        其中包括 Marv the Miner 教程?/P>



      3. Alex 2006-02-04 14:28 发表评论
        ]]>
        利用Java ~写手机应用E序 Motorola iDEN(转蝲Q?/title><link>http://www.aygfsteel.com/jiansong/articles/29527.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Sat, 04 Feb 2006 06:27:00 GMT</pubDate><guid>http://www.aygfsteel.com/jiansong/articles/29527.html</guid><wfw:comment>http://www.aygfsteel.com/jiansong/comments/29527.html</wfw:comment><comments>http://www.aygfsteel.com/jiansong/articles/29527.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jiansong/comments/commentRss/29527.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jiansong/services/trackbacks/29527.html</trackback:ping><description><![CDATA[<div id="wmqeeuq" class=postbody>█前a <BR><BR>本文内容的所有操作皆在Windows 200操作pȝ上经q测试。如果您在不同的q_上验证本文内容,例如Windows 98或是Windows MeQ则我们无法保证会有相同的结果?<BR><BR>█简?<BR><BR>不知从什q时候开始,我们H然感觉到周围的人各各拥有一只手机。利用手Z别h沟通成了我们生zȝ一部䆾。北Ƨ某些先q国家的人民可以利用手机购买自动售货机所出售的商?他们也可以在从事行动商务(m-commence) 交易时利用手机做ZU认证工兗在日本Q行动电话的许多附加功能更是q轻人文化的一部分。即来临的3GQ无U宽频的梦带给了h们对无线通讯未来的期待?<BR><BR>然后Q有些厂商开始行销它们自己生的PDAQ好象没有一台PDA在手Q就不像CZ的。各式各LPDA充斥市面Q畅销的与不畅销的,让hD撩ؕ。这时生了一个大问题--要我们同时携带手机和PDA是一件很ȝ的事?q它们都还轻薄短。如果可以把手机和PDA合而ؓ一岂不是更方便? 于是听到消费者心声的厂商Q开始有推出手机和PDA合而ؓ一的品,从NOKIA 9000、Motorola A6188(太极)Q到最q要推出的Ericsson R380、NOKIA 9210Q都是手ZPDAl合的例子,虽然因ؓ售h的关p,但是q些产品仍然是许多h梦寐以求的高阶品?<BR><BR>管有了PDA与手机结合的产品出现Q我们仍然觉得有所不Q我惛_家一定发CQ就是应用程序的不Q虽然手机和PDA l合了,可是q些产品上的PDA功能看v来似乎是ȝ。我们可以Q意在PalmOS、Windows CE、EPOC{PDA上用C/C++或是Java~写q些q_上的应用E序Q但是却从未有过Z我们写好的E序下蝲到这些手Z执行(即有些手机的PDA也是使用EPOCQ如Ericsson R380)?<BR><BR>怿厂商也听到我们这些喜Ƣ到处写E序的工E师的心CQ所以从2000q年底开始,卛_陆陆l箋有许多支持Java的手机即推出,当然Q这些厂商也提供了在手机上开发程序的SDKQ我们终于可以在手机上面写些程序自׃!q是以前{了很久的美梦?<BR><BR>手机q_的多h与复杂性,和PDA比较h可以说是有过之而无不及Q于是大家就可以知道 - ?又是Javaz上用场的时候了。我们都知道在浏览器上执行的JavaE序叫做AppletQ在PalmOS上执行的JavaE序叫做SpotletQ然而在手机上执行的应用E序我们U做MIDletQ相信对大家来说都是一个陌生的名词Q这也就是本文章所要介l的主角?<BR><BR>支持Java的手机大厂目前已知有NOKIA (预计?001q年初推Zƾ支持Java的手机NOKIA 9210)、Motorola(会先在支持integrated Digital enhanced network(iDen)|络的手Z支持JavaQ然后再推出支持Java的GSM手机Q该公司的手机大致会?002q前全部支持Java)以及NTT DoCoMo(在明年W二季度左右推出支持Java的手??<BR><BR>虽然q些大公叔R准备支持JavaQ不q在军_~写本文Ӟ只有Motorola其SDK开放于|站上供E序开发者下载测试,所以本文内定w是根据Motorola J2ME SDK所~写。又׃q些手机市面上无法取得,所以我们的E序都是在SDK内附的模拟器中执行,怿最后这些手Z市时Q我们所~写的MIDlet应该会很Ҏq成功地在Motorola的手Z执行才对?BR><BR>█如何取得Motorola J2ME SDK <BR><BR>我们要做的第一件事情当然还是要先取得SDK|?<BR>L接到https://commerce.motorola.com/idenonline/ideveloper/下蝲Motorola J2ME SDK Drop 7。如果您不是iDEN] Developer的会员,请先在网l上注册(免费)。注册成功之后,Motorola会将密码寄到您的email信箱之中Q然后用该密码d|页上的My Development Center。进入之后选择|页上头的TOOLS & RESOURCES以进入可下蝲的开发工L|页Q请选择Motorola J2ME SDK Components Developer EditionQ?Drop 7.0下方的下载超q结以下载SDKQ整个SDK的大约? MB左右?<BR><BR>h意下载前的Download Page for Motorola J2ME?SDK安装说明Q里头会告诉你安装密码,请先行记下。稍后当您在您的电脑上安装Motorola J2ME SDK的时候,会询问您安装密码Q所以请务必C该密码?BR><BR>█Motorola J2ME SDK的安?<BR><BR>安装需?BR>Ҏ官方需求,安装Motorola J2ME SDK的基本配备ؓ:<BR>Pentium 100 MHz微处理器<BR>64 MB RAM<BR>Windows NT WorkStation 4.0配合Service Pack 3 / Win98<BR>(本文是在Windows 2000 Professional中文版上试)<BR>U? MB的硬盘空?BR>Java 2 SDK 1.2.2<BR>(本文使用Java 2 SDK 1.3.0_01作测? <BR><BR>安装Motorola J2ME SDK<BR>要安装新版Motorola J2ME SDK之前Q请先确认您已经旧版的Motorola J2ME SDK完全删除。您可以由控制台里头?「新?删除E序」的功能删除旧版Motorola J2ME SDK。之后再旧版Motorola J2ME SDK安装所在\径清除即可?BR>解开您从Motorola|站上下载的ZIP文gQ您会看C个名为Motorola_SDK.exe的文Ӟ双击此文件即可开始安装动作。请注意Q在安装时系l会要求您输入密码,误入之前所U录的安装密码即可?<BR><BR>█Motorola J2ME SDK目录l构<BR><BR>当您成功地安装Motorola J2ME SDK之后Q其目录l构如下?<BR><BR><BR><BR>█MIDletE序l构<BR><BR>在手Z执行的程序我们统UMIDletQ其E序l构很简单,与大家熟悉的Appletl构有异曲同工之妙?BR>每一个MIDletE序都必ȝ承自javax.microedition.midlet.MIDletcdQƈ实做三个函式Q它们分别是:<BR><BR>protected void startApp()<BR>protected void pauseApp()<BR>protected void destroyApp(Boolean unconditional)<BR>而一个MIDletE序的v始与l束之流E我们以下图来表C?<BR><BR>█编写ƈ~译MIDlet<BR><BR>请先到您的Motorola J2ME SDK安装目录下的demo\midlets目录底下新徏一个名为HelloMIDlet.java的文Ӟ其内容ؓ:<BR><BR>HelloMIDlet.java<BR>import javax.microedition.lcdui.*;<BR>import javax.microedition.midlet.*;<BR><BR>public class HelloMIDlet extends MIDlet <BR>{<BR>HelloMIDlet() <BR>{ <BR>}<BR><BR>protected void startApp() throws MIDletStateChangeException <BR>{<BR>}<BR><BR>protected void pauseApp() <BR>{<BR>}<BR><BR>protected void destroyApp(boolean unconditional)<BR>throws MIDletStateChangeException <BR>{<BR>}<BR>}<BR>在demo\midlets目录之中您会看到一个名为compileAll.bat的批处理文gQ前面有提到Q这个批处理文g除了可以帮助您编译所有内附范例程序之外,q可以简化您自己所~写的MIDlet之编译流E?BR>请在命o列视H输? compileAll HelloMIDlet.java<BR>如果成功~译Q屏q上输出的结果如下图所C?<BR><BR><BR><BR><BR>从屏q上的输出,您可以发玎ͼ要让MIDlet可以在手Z执行Q大体上q是要经q两个动?与Spotlet怼)Q分别是~译(compiling)以及预先审核(Preverifying)?BR>有关预先审核q个动作Q笔者已l在RUN!PC 11月号的文章「利用Java ~写PalmOS应用E序基础」之中有向读者们提过Q如果对q个斚w有所疑问的朋友,请再您的RUN!PC 11月号d来复习一下吧!<BR><BR>从这个简短的MIDlet制作程里头Q相信大家可以发玎ͼ比vUa用Sun的CLDC~写能在KVM上执行的Spotlet要简单上许多。原因是compileAll.batq个批处理文件帮我们做掉大部分dirty work?BR>那ُQ如果您写好的程序ƈ非放在demo\midlets目录之中Q是否就无法~译? 从compileAll.bat里头Q我们可以发现它帮我们完成上qC工作的指o。如果我们写好的E序攑֜demo\midlets目录以外的地方,您可以执行下面的指oQ您仍然可以成功地制作MIDlet:<BR>(我们假设您的Motorola J2ME SDK安装在D:\MotoSDK目录之中Qƈ您自行~写的HelloMIDlet.java|于d:\jdk1.3.0_01\my目录之中。同时我们假设您在d:\jdk1.3.0_01\my目录底下执行下面指o?<BR>~译: <BR><BR>javac -O -bootclasspath d:\MotoSDK\lib HelloMIDlet.java <BR>注意: -bootclasspath指向cd数库的所在位|?<BR><BR>预先审核: <BR><BR>d:\MotoSDK\bin\preverifier -classpath d:\MotoSDK\lib;. -d . HelloMIDlet <BR>注意:<BR>1 . -classpath指向cd数库的所在位|,也要指向我们所~写的MIDlet所在的位置?BR>2 .–d指向您希望预先编译类文g产生之后所攄的\?如果?."表示本目录,会覆盖掉原先未经q预先编译的cL件。如果您没有指定Q则预设gؓ".\output"目录?<BR><BR>当然Q如果您嫌自己手动操作很ȝQ您可以compileAll.bat复制到其它目录之中,q更改其~译指o与预先审核指令之中和cd数库有关的相兌定即可?BR>提到compileAll.batQ顺便向各位读者说明一下,在前面有提到QcompileAll.bat可以帮助您编译所有位于demo\midlets目录下的范例E序Q您只要在命列列下直接输? compileAll卛_。compileAll.bat会自动当您编译的package有以下几?<BR>com.mot.j2me.midlets.bounce<BR>com.mot.j2me.midlets.imagetests<BR>com.mot.j2me.midlets.paddleball<BR>com.mot.j2me.midlets.scribble<BR>com.mot.j2me.midlets.tests<BR>com.mot.j2me.midlets.tutorials<BR>如果您希望compileAll.bat自动帮您~译其它package底下的程序,h开启compileAll.batQ修改其COMPILECLASS环境变数的设定即可?BR><BR>█修改ƈ执行MIDlet <BR><BR>写好E序之后Q大家最希望的事情当然就是让它在手机上执行,不过׃目前大家无法取得Motorolaq些支持Java的手机,所以我们只能在Motorola J2ME SDK内附的模拟器上执行我们写好的MIDlet。相信手机正式推出时Q应该可以顺利地在手Z执行。底下笔者将告诉您如何用Motorola J2ME SDK内附的模拟器来测试您所~写的MIDlet?BR>在这之前Q由于之前我们所~写的范例程序只是简单的MIDletI壳Q我们必让它能够在模拟器上昄Z些信息才可以Q因此请修改上一个程序范例,使它的内容如?<BR>HelloMIDlet.java<BR>import javax.microedition.lcdui.*;<BR>import javax.microedition.midlet.*;<BR><BR>public class HelloMIDlet extends MIDlet <BR>{<BR>private Display firstDisplay ;<BR>private Form firstForm ;<BR>HelloMIDlet() <BR>{<BR>firstDisplay = Display.getDisplay(this) ;<BR>firstForm = new Form("Hello MIDlet") ;<BR>StringItem firstStrItem = new StringItem("Hello","MIDlet") ;<BR>firstForm.append(firstStrItem) ;<BR>}<BR><BR>protected void startApp() throws MIDletStateChangeException <BR>{<BR>firstDisplay.setCurrent(firstForm) ;<BR>}<BR><BR>protected void pauseApp() <BR>{<BR>}<BR><BR>protected void destroyApp(boolean unconditional)<BR>throws MIDletStateChangeException <BR>{ <BR>}<BR>}<BR>请将此文件放|在\demo\midlets目录下。编译完成之后,请将目录切换到scripts子目录之中,您会在此目录里发C些写好的批处理文件。请在该目录下执行这些批处理文g指o以启动模拟器。执行的指o与执行结果如下所C?<BR><BR>指o: runEmul HelloMIDlet<BR>输出l果:<BR><BR><BR>指o: runMotoi1000 HelloMIDlet<BR>输出l果:<BR><BR><BR>指o: runMotoiDEN HelloMIDlet<BR>输出l果 :<BR><BR><BR>指o: runStarTac HelloMIDlet<BR>输出l果:<BR><BR><BR>指o: runMyDevice HelloMIDlet<BR>输出l果<BR>Error loading property file: C:/properties/mydevice.props (pȝ找不到指定的路径?会出现错误信息是因ؓ您没有指定属于是用者自订的手机外观的缘故,后面会教您如何讑֮用户自订的手机外观?BR><BR><BR><BR>如果我们写好的E序攑֜demo\midlets目录以外的地方,您可以执行下面的指oQ仍然可以成功地启动模拟器ƈ执行MIDlet:<BR>(我们假设您的Motorola J2ME SDK安装在D:\MotoSDK目录之中Qƈ您自行~写的HelloMIDlet.java|于d:\jdk1.3.0_01\my目录之中。同时我们假设您在d:\jdk1.3.0_01\my目录底下执行下面指o?<BR><BR>执行一般模拟器 java -Djava.library.path=d:\MotoSDK\lib <BR>-classpath d:\MotoSDK\bin\Emulator.jar;d:\MotoSDK\bin\ConfigTool.jar com.mot.tools.j2me.emulator.Emulator <BR><BR>-classpath.;d:\MotoSDK\lib javax.microedition.midlet.AppManager HelloMIDlet <BR><BR>-JSA 1 1 <BR><BR>h?<BR>W一?classpath讑֮Q?classpath与\径名UC间有I格?BR>W二?classpath讑֮Q?classpath与\径名UC间没有空根{?<BR><BR><BR><BR>执行模拟器ƈ套用i1000手机外观<BR>java -Djava.library.path=d:\MotoSDK\lib <BR>-classpath d:\MotoSDK\bin\Emulator.jar;d:\MotoSDK\bin\ConfigTool.jar com.mot.tools.j2me.emulator.Emulator <BR><BR>-classpath.;d:\MotoSDK\lib <BR>-deviceFile resources\Motorolai1000.props<BR>javax.microedition.midlet.AppManager <BR><BR>HelloMIDlet<BR>-JSA 1 1 <BR><BR>h?<BR>W一?classpath讑֮Q?classpath与\径名UC间有I格?BR>W二?classpath讑֮Q?classpath与\径名UC间没有空根{?<BR><BR><BR><BR>执行模拟器ƈ套用iDEN手机外观 java -Djava.library.path=d:\MotoSDK\lib <BR>-classpath d:\MotoSDK\bin\Emulator.jar;d:\MotoSDK\bin\ConfigTool.jar com.mot.tools.j2me.emulator.Emulator <BR><BR>-classpath.;d:\MotoSDK\lib <BR>-deviceFile resources\MotorolaiDENPlatform.props<BR>javax.microedition.midlet.AppManager <BR><BR>HelloMIDlet<BR>-JSA 1 1 <BR>h?<BR>W一?classpath讑֮Q?classpath与\径名UC间有I格?BR>W二?classpath讑֮Q?classpath与\径名UC间没有空根{?<BR><BR><BR><BR>执行模拟器ƈ套用StarTac手机外观 java -Djava.library.path=d:\MotoSDK\lib <BR>-classpath d:\MotoSDK\bin\Emulator.jar;d:\MotoSDK\bin\ConfigTool.jar com.mot.tools.j2me.emulator.Emulator <BR><BR>-classpath.;d:\MotoSDK\lib <BR>-deviceFile resources\StarTac.props<BR>javax.microedition.midlet.AppManager <BR><BR>HelloMIDlet<BR>-JSA 1 1 <BR>h?<BR>W一?classpath讑֮Q?classpath与\径名UC间有I格?BR>W二?classpath讑֮Q?classpath与\径名UC间没有空根{?<BR><BR><BR><BR>执行模拟器ƈ套用用户自订手机外观 java -Djava.library.path=d:\MotoSDK\lib <BR>-classpath d:\MotoSDK\bin\Emulator.jar;d:\MotoSDK\bin\ConfigTool.jar com.mot.tools.j2me.emulator.Emulator <BR><BR>-classpath.;d:\MotoSDK\lib <BR>-deviceFile <您的props文g所在的l对路径>javax.microedition.midlet.AppManager <BR><BR>HelloMIDlet<BR>-JSA 1 1 <BR>h?<BR>W一?classpath讑֮Q?classpath与\径名UC间有I格?BR>W二?classpath讑֮Q?classpath与\径名UC间没有空根{?BR>如果您将您的props文g攑֜d:\MotoSDK\bin的resources目录之下Q则上述指o只要ҎQ?deviceFile resources\<您的props文g?gt; <BR><BR><BR><BR>注意Q当您您直接使用上述指o启动模拟器,如果出现底下错误信息:<BR>Error loading property file: resources/defaultdevice.props (pȝ找不到指定的路径?<BR>q是因ؓ您没有将d:\MotoSDK\bin目录下的resources子目录复制到d:\JDK1.3.0_01\my目录之下的缘故?BR><BR>█对MIDletq行调试 <BR><BR>~写PalmOS上的SpotletӞ我们可以利用System.out.println()函式帮我们印Z些讯息以帮助调试Q那q在手机上的MIDlet? 原则上,我们q是可以利用System.out.println()函式做一些输出。当模拟器执行时Q就会在命o列上输出一些讯息?BR>另外Q在PalmOS上,有KVMutil.prc可以帮助我们U录E序所输出的讯息。那手机上呢? 因ؓ没有实际的机器可以测试,因此q个问题到现在还不得而知Q相信Motorola到时候会有完善的解决Ҏ?<BR>在Motorola J2ME SDK内附的说明文件之中,概略地提C调试的问题,里头提到Q往后如果我们要q行Z调试(on-device debugging)的话Q必要满几个条g: <BR><BR>机器本n要具备调试相兛_能,q与KDWP(Kvm Debug Wire Protocol)兼容。因试时Q调试工具需要利用KDWP和机器上交谈以取得调试信息?<BR>刉厂商本w要提供下蝲MIDlet到手Z以进行调试的Ҏ?<BR>提供对MIDlet调试的工P必须支持手机在利用KDWP调试时所使用的传输接?例如串行口或UDP)?<BR>嗯,看v来能够进行调试,MIDletE序的编写应该是很方便的事情了?BR><BR>█Motorola J2ME SDK对中文的支持 <BR><BR>怿看过RUN!PC 11月号的文章「利用Java ~写PalmOS应用E序基础」的读者,在编写PalmOS上的Spotlet时一定会遇到中文无法正常昄的问题。中文的问题分成两个部分Q一个是在用h口上的中文问题,一个是在命令列输出(利用System.out.println()函式所做的输出)上的中文问题Q请大家做个实验,前面我们所~写的程序改如下:<BR>HelloMIDlet.java<BR>import javax.microedition.lcdui.*;<BR>import javax.microedition.midlet.*;<BR><BR>public class HelloMIDlet extends MIDlet <BR>{<BR>private Display firstDisplay ;<BR>private Form firstForm ;<BR>HelloMIDlet() <BR>{<BR>firstDisplay = Display.getDisplay(this) ;<BR>firstForm = new Form("哈罗!MIDlet") ;<BR>StringItem firstStrItem = new StringItem("哈罗","c_d列特") ;<BR>firstForm.append(firstStrItem) ;<BR>System.out.println("MIDlet启动") ;<BR>} <BR><BR>protected void startApp() throws MIDletStateChangeException <BR>{<BR>firstDisplay.setCurrent(firstForm) ;<BR>}<BR><BR>protected void pauseApp() <BR>{<BR>}<BR><BR>protected void destroyApp(boolean unconditional)<BR>throws MIDletStateChangeException <BR>{ <BR>}<BR>}<BR>本MIDlet~译q经q预w审怹后,我们开启模拟器来执行此MIDletQ底下ؓ执行l果:<BR><BR><BR>用户接口输出: <BR><BR><BR>命o列输?<BR><BR><BR>我们从结果发玎ͼ预设的编译指令会让用h口正常输Z文,而命令列无法输出正确的中文?BR><BR>接着请将compileAll.bat之中原本的指?BR>javac -O -bootclasspath ..\..\lib %COMPILECLASS%<BR>修改?BR>javac –encoding ISO8859_1 -O -bootclasspath ..\..\lib %COMPILECLASS%<BR>之后Q重新编译此MIDlet执行l果: <BR><BR>用户接口输出: <BR><BR><BR>命o列输?:<BR><BR><BR><BR>q个l果与PalmOS上所做的中文试l果有所不同?BR>当您~写SpotletӞ如果您用javac 。。。指令时Q您会发现模拟器上的用户接口输出是ؕ码,可是命o列上的输出却可以正常输出中文。但是如果您使用的是javac -encoding ISO8859_1 。。。指令,则CLDC内附模拟器上的用h口输出或是命令列上的输出全部都变成ؕ码,无法正常输出中文(q个部分是因为CLDC内附模拟器实做的问题Q造成与实际机器的l果有差??BR>MQ如果之前您所~写的Spotlet无法在装有中文系l的实际机器或POSE上正常输Z文,h也如法炮Ӟ在编译指令中加入-encoding ISO8859_1Q就可以在实际机器或POSE上看到正常的中文字了?BR><BR>会生此问题的主因,主要是因为编译好的JavacL?byte code)之中Q所有的文字~码都采用UTF8。D例来_当您在程序码里用?启动"q两个中文字Ӟ<BR>"?q个字的Big5~码为B1D2?BR>"?q个字的Big5~码为B0CA?BR>我们会用javac xxxx.java来编译原始码以生类文g。其实这行指令,在繁体中文的Windows环境底下Q相当于javac -encoding "Big5" xxxx.java。也是_当编译器d到Big5~码范围的中文字Ӟ会自动将此Big5码经q「Big5؈ Unicode 对照表」将Big5转ؓUnicodeQ也是?l过查表之后Q?BR>“v”这个字的Unicode~码?55F?BR>“动”这个字的Unicode~码?272?BR>然后再利用UTF8~码此Unicode转ؓUTF8Q储存在cL件之中,因此Q如果您用UltraEdit之类的文字编辑器查看cL件时Q您会看刎ͼ<BR>"?q个字的UTF8~码为E5959F?BR>"?q个字的UTF8~码为E58B95?BR><BR>接着Q当我们在程序执行时如果要将中文输出Q则JVM会负责读qUTF8码,然后其转回UnicodeQ最后依据您所使用的系l环境预讄~码转回Big5Q再输出臛_q上?BR>可是l过试l果QKVMg只有做到把UTF8读进来,转换回Unicode之后q接输Z。少了{回Big5的步骤,因此Q操作系l把Unicode当作Big5来处理,自然找不到该码所对应的中文字了,也因此输出的是一?????? 的符受这也是我们在PalmOS上即使装了中文系l,也无法正常显CZ文的~故?BR>OKQ既然知道KVM只帮我们做了一半的工作Q那事情好办了Q我们只要让UTF8转回之后Q仍然保有Big5的编码方式即可,于是我们使用指ojavac -encoding ISO8859_1 xxxx.javaQ请~译器不要将E序码中中文Big5~码的两个byte视ؓ一?因ؓ视ؓ一体就会引发查询Big5 ؈ Unicode对照表的工作)Q只要将中文当作是普通的西欧字母字集卛_Q因此,当我们用了上述指oQ您会发现类文g之中的中文变成,<BR>"?q个字的UTF8~码为C2B1 C392?BR>"?q个字的UTF8~码为C2B0 C38A?BR>大家可以发现~译器把B1、D2、B0、CA个别当作一个码来处理。于是,当KVMd此编码时Q就会将他们转回B1D2以及B0CAQ然后KVM直接输出Q就可以正常C用中文了?BR><BR>最后ȝ整个问题Q就W者的推断QCLDC内附的模拟器再没有用javac –encoding ISO8859_1 xxxx.java指o之前Q会在用h口命o列输Zؕ码,q才是正常的l果Q?而Motorola J2ME SDK内附模拟器的用户接口中文之所以没问题Q很可能只是因ؓ模拟器操作的差异。因此根据KVM的输出结果来看,很可能在实际的手ZQ我们都必须加上-encoding ISO8859_1选项才能正确输出中文?<BR><BR>在此特别感谢静宜大学资管pȝ唐恺?kailung.tang@msa.hinet.net)同学。因为笔者于他经q热烈的讨论之后Q我们才能对J2ME的中文问题有更深入的认识 <BR><BR>█支持Motorola J2ME SDK的开发工?<BR><BR>在编写本文的时候,支持MIDlet开发的集成开发环?IDE)只有Motorola J2ME SDK附带文g之中所提到的CodeWarrior而已。相信其它厂商,如BorlandQ应该也会很快地利用其品JBuilder的OpenTools API来支持MIDlet的开发才对,更何况Borland JBuilder目前已经有Spotlet的解x案了?BR>因ؓW者无法拿到CodeWarrior作测试,所以无法在此提供大家相关信息,怿如果有机会的话,会另外以专文向大家介l如何利用CodeWarrior~写MIDlet?BR>Motorola J2ME SDK附带文g在附录的部分有对利用CodeWarrior开发MIDlet做简单的介绍Q相信对初学者来_已经相当_了?BR><BR>█Motorola J2ME SDK内含的辅助开发工?<BR><BR>在Motorola J2ME SDK之中内含三项辅助开发工P可以便利我们的程序开发工作,它们分别? <BR><BR>J2ME模拟?J2ME Emulator)<BR>让您可以在您的PC上模拟Motorola来会支持J2ME的手|。如此一来就可以在PC上直接测试写好的E序?<BR>Bytecode验证?Bytecode Verifier)<BR>此验证器用来验证cL?classfile)之中的bytecode不会对存储器做非法的存取。ƈ认载入虚拟机器的类文g所做的所有动作皆W合Java虚拟机器规格(Java Virtual Machine Specification)?<BR>配置~辑?Configuration Editor)<BR>让您能够建立或修改device profile?<BR>在Motorola J2ME SDK内附的文件之中对q三个工h详细的说明,W者在此就不再赘述了?BR><BR>█ȝ <BR><BR>?好篏人,l于C该做ȝ的时候了! 大家以ؓMIDletpL束了?? MIDletq有许多好玩的玩意儿? 我们在本系列之后的文章中ؓ大家更深入探讨MIDlet。咱们下ơ见?BR><BR>█附?范例E序 <BR><BR>Motorola J2ME SDK之中内附许多有趣的范例,它们位于demo/midlets/目录底下。有兴趣l箋_进的读者可以由q些范例学到更多有关MIDlet的深入技巧,׃q些范例的执行画面过大,所以在本文之中将他们省略Q请读者们自行参考说明文件?BR>q些范例E序?<BR>Bounce<BR>com.mot.j2me.midlets.bounce.Bounce<BR>PaddleBall<BR>com.mot.j2me.midlets.paddleball.PaddleBall<BR>Scribble<BR>com.mot.j2me.midlets.scribble.Scribble<BR>FontDemo<BR>com.mot.j2me.midlets.tutorials.FontDemo<BR>GraphicsDemo<BR>com.mot.j2me.midlets.tutorials.GraphicsDemo<BR>RecordStoreDemo<BR>com.mot.j2me.midlets.tutorials.RecordStoreDemo<BR>UDP Tutorial Application<BR>com.mot.j2me.midlets.tutorials.UDPReceive<BR>AlertTest<BR>com.mot.j2me.midlets.tests.AlertTest<BR>ChoiceGroupTest<BR>com.mot.j2me.midlets.tests.ChoiceGroupTest<BR>DateFieldTest<BR>com.mot.j2me.midlets.tests.DateFieldTest<BR>FormTest<BR>com.mot.j2me.midlets.tests.FormTest<BR>GaugeTest<BR>com.mot.j2me.midlets.tests.GaugeTest<BR>KeyEventsTest<BR>com.mot.j2me.midlets.tests.KeyEventsTest<BR>TextBoxTest<BR>com.mot.j2me.midlets.tests.TextBoxTest<BR>TextFieldTest<BR>com.mot.j2me.midlets.tests.TextFieldTest<BR>TickerTest<BR>com.mot.j2me.midlets.tests.TickerTest </DIV><img src ="http://www.aygfsteel.com/jiansong/aggbug/29527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jiansong/" target="_blank">Alex</a> 2006-02-04 14:27 <a href="http://www.aygfsteel.com/jiansong/articles/29527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>怎样使用摩托|拉模拟器Motorola SDK v3.1 for J2MEQ{载)http://www.aygfsteel.com/jiansong/articles/29528.htmlAlexAlexSat, 04 Feb 2006 06:27:00 GMThttp://www.aygfsteel.com/jiansong/articles/29528.htmlhttp://www.aygfsteel.com/jiansong/comments/29528.htmlhttp://www.aygfsteel.com/jiansong/articles/29528.html#Feedback0http://www.aygfsteel.com/jiansong/comments/commentRss/29528.htmlhttp://www.aygfsteel.com/jiansong/services/trackbacks/29528.html怎样使用摩托|拉模拟器Motorola SDK v3.1 for J2ME

        大家都曾l在|上下蝲q手机游戏或者J2ME的应用Y件来充实自己手机里的JavaE序Q?但是Q往往是辛辛苦苦下载的东西或者不能用Q或者不W合自己的用需求,造成很多费。对于只能通过GPRS上网的方式来获得软g和游戏的玩家更加不方便了,因ؓ好不Ҏ׃银子又不能用Q多心疼啊:Q?
        Motorola SDK v3.1 for J2ME 是Moto出品的手机模拟器Q具有强大的模拟功能Q我们在下蝲E序以后可以在模拟器上先q行一下,看一下结果,满意后再下蝲到手机当中。在手机~程当中Q模拟器更是必不可少的工兗还有一些只能安装在别的型号手机上的游戏Q就可以在模拟器上过把瘾了!
        1. 软g安装Q?
        在http://kb.motorola.metrowerks.com/motorola/pcsHome.do可以下蝲到Motorola SDK for J2ME的最新版本,q里?.1版本Zq行说明。zip文g解压~以后成为Motorola SDK v3.1.1 for J2ME.exeQ?q行安装E序Q将它安装到c:\program files\motorola 当中?
        安装完毕以后在开始菜单当中出现Motorola SDK v3.1 for J2ME菜单Q包括两个配|菜单,一个文档菜单和一个运行程序菜单Motorola Launchpad.
        2. 下蝲或编写J2MEE序Q?
        在网上下载一个适合手机版本的J2ME游戏Q或者自q写一个J2MEE序Q打包成jad文g和jar文gQ?比如我们写了一个名叫Tetrix的游戏,一个俄|斯方块的游戏, 包括Tetrix.jad, Tetrix.jar两个文g?
        3. q行J2MEE序Q?
        点击Motorola SDK v3.1 for J2MEE序l当中的Motorola Launchpad启动模拟器?
        选项说明如下Q?
        Handset: 适用的手机型P?88_Simplified_Chines, A830, V60i, T720i, StarTac, Mp3_Player{,我们选择T720iQ?
        Language: 适用的语aQ有ENGLISH, SIMPCHN, TRADCHN, 分别代表pQ简体中文和J体中文。我们选择SIMPCHN, 注意有些手机不支持中文,有些E序中有中文Q需要选择中文才能昄Q?
        Advanced: 高属性,均ؓ预设Q一般不需要更改,如果不小心误操作Q可以按default恢复初始|
        Class Name: 曄q行q的E序的列表,再次q行时可以从此选择Q?
        Run from JAD/JAR: 从jad, jar文gq行Q第一ơ运行要炚w此,点击Browse,选择要运行的E序jad 文gQ?
        Keep Launchpad open after MIDlet launch: 在程序运行完毕不关闭Launchpad, 一般要选取此项Q因为可能要同时试多个J2MEE序Q?
        Keep command window open after completion: 在程序运行完毕后不关闭命令窗口,一般不选此,命oH口主要是在调试q程中看中间l果Q?
        Save command line to batch file: 把执行过E命令存成bat批处理文件。这样只要执行这个文件就可以了,不用开启LaunchpadQ?
        最后一栏是命o行的说明Q至此,讄都已完成Q点击Launch来运行J2MEE序。这时将会蟩Z个类gDOS的命令行H口。显C行命令,q一会儿会显CT720i的界面,和在自qT720i手机上面q行是一L?
        几点说明Q?
        1. 模拟器运行的按键反应速度一般比实际手机快得多;
        2. 模拟器支持MIDP2.0但是几乎所有的手机都不支持Q所以有些面?.0写的E序在模拟器上可以正常运行,在手Z不能?
        3. q行E序之前要更改jad文g中的URL属性ؓ当地路径Q否则会找不到jar包?
        4. 可以在Motorola SDK Documentation 当中得到详细的说明和~程参考?
        5. 键盘上的数字键盘和手机上的可能有所不同Q有可能4,6颠倒,8Q?颠倒?
        好了Q快下蝲一个尝试一下吧Q?

        Alex 2006-02-04 14:27 发表评论
        ]]>
        վ֩ģ壺 | ľ| | | ͺ| | | Ϋ| | | | Ӽ| | | | | | | | | ͨ| ƽ| ʩ| ĵ| | | ˮ| | | ƽ| Ȩ| | ȷɽ| | | ѽ| ̨| | Ӧ| ɽ| ױ|