﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-j2meblog</title><link>http://www.cnitblog.com/jackery/</link><description>symbian</description><language>zh-cn</language><lastBuildDate>Tue, 05 May 2026 03:13:33 GMT</lastBuildDate><pubDate>Tue, 05 May 2026 03:13:33 GMT</pubDate><ttl>60</ttl><item><title>J2ME手机编程的启示http://www.j2mehome.com/j2me/jichu/12635.html</title><link>http://www.cnitblog.com/jackery/archive/2009/10/09/61745.html</link><dc:creator>j2meer</dc:creator><author>j2meer</author><pubDate>Fri, 09 Oct 2009 13:55:00 GMT</pubDate><guid>http://www.cnitblog.com/jackery/archive/2009/10/09/61745.html</guid><wfw:comment>http://www.cnitblog.com/jackery/comments/61745.html</wfw:comment><comments>http://www.cnitblog.com/jackery/archive/2009/10/09/61745.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jackery/comments/commentRss/61745.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jackery/services/trackbacks/61745.html</trackback:ping><description><![CDATA[<div id="Published By Juziyue-[4]1_00DC03BD000C4541898BBAA034A40DE7_5CB6DF82EAD643D5802BC9891DEAB095">最近空闲的时间学了一下<a href="http://www.j2mehome.com/j2me">j2me开发</a>游戏编程，感觉还是很有意思。看了很多代码后才发现很多东西的不变的：<br/> &nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;&nbsp;对操作系统的了解：不了解操作系统也可以编程序，但是，也许在效率上也许会有点的偏差。<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;同时对线程的理解也是编好游戏的关键。<br/> &nbsp;&nbsp;&nbsp;&nbsp;<br/> &nbsp;&nbsp;&nbsp;&nbsp;2. 面向对象程序设计：理解设计模式，框架会对我们理解游戏编程有很大的用处，如何合理的建立类，<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如何合理的建立类与类之间的关系是面向对象要解决的基本问题。<br/> <br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 很多时候，做程序和做人一样，只有把握根本才不会出方向性的问题，做人要讲一个真字，真实的生活，<br/> &nbsp;&nbsp;&nbsp;&nbsp;真诚的对人。这样，我们才会问心无愧。只有踏实的生活，才能快乐，只有本色的生活，才能快乐，只有<br/> &nbsp;&nbsp;&nbsp;&nbsp;勇于面对，才会快乐。只有这样，你老了以后，即使一事无成，也不会感觉人生很无奈。<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 无论你是什么人，在做什么事情，都是表面的东西。就像写游戏和写网站的人，他们在做不同的事情，<br/> &nbsp;&nbsp;&nbsp;&nbsp;却要遵循相同的原则，期间会有一点差异，但是把握本质就不会搞错方向。<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 没有钱也是这样活，有钱也是这样活，没有钱一天是24个小时，有钱也是一天24个小时，比尔盖茨也<br/> &nbsp;&nbsp;&nbsp;&nbsp;会因为yahoo而头大，你会因为买房子，娶老婆而头大，我相信，天底下有很多东西的原理都是相似的，<br/> &nbsp;&nbsp;&nbsp;&nbsp;不管你的生活状态如何，美来自内心，美不来自美宝莲。真实的生活，真实的体验生活，还是那句话，<br/> &nbsp;&nbsp;&nbsp;&nbsp;人诗意的生活。编程，做有思想的程序员。<br/> <strong><wbr/><em><wbr/><font style="LINE-HEIGHT: 1.3em" color="#0000CC">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我最想不通的事情是为什么实际上的事情都是有规律的</font><wbr/></em><wbr/></strong><wbr/><br/> <strong><wbr/><em><wbr/><font style="LINE-HEIGHT: 1.3em" color="#0000CC">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -----阿尔伯特 爱因斯坦</font><wbr/></em><wbr/></strong><wbr/><img id="paperPicArea1" style="DISPLAY: none; POSITION: relative" alt src="http://www.j2mehome.com/uploads/allimg/090924/1932564X3-0.gif"/> Tag标签: 游戏编程,操作系统,面向对象 <p>&nbsp;</p></div><img src ="http://www.cnitblog.com/jackery/aggbug/61745.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jackery/" target="_blank">j2meer</a> 2009-10-09 21:55 <a href="http://www.cnitblog.com/jackery/archive/2009/10/09/61745.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>http://www.j2mehome.com/ PHP - 获取访客来路信息</title><link>http://www.cnitblog.com/jackery/archive/2009/10/09/61744.html</link><dc:creator>j2meer</dc:creator><author>j2meer</author><pubDate>Fri, 09 Oct 2009 13:23:00 GMT</pubDate><guid>http://www.cnitblog.com/jackery/archive/2009/10/09/61744.html</guid><wfw:comment>http://www.cnitblog.com/jackery/comments/61744.html</wfw:comment><comments>http://www.cnitblog.com/jackery/archive/2009/10/09/61744.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jackery/comments/commentRss/61744.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jackery/services/trackbacks/61744.html</trackback:ping><description><![CDATA[<div id="Published By Juziyue-[4]1_FF49AA247D484C23B84CEE8153976C4A_BE6D2033F4674E329B523E7D22CC0E4F"><p>PHP - 获取访客来路信息(转自php100)<br/> 不少网站访问统计程序提供有来路信息，客户查阅统计资料时从中得知访问者从什么网站连接过来。所谓来路，其实就是别人从哪里点击了你网站的链接，即，从什么页面连接到你的网站。 在PHP中，获取来路信息是非常简单的，我们只需用到referer。HTTP头携带的信息</p> <p><br/> 不少网站访问统计程序提供有“来路”信息，客户查阅统计资料时从中得知访问者从什么网站连接过来。所谓“来路”，其实就是别人从哪里点击了你网站的链接，即，从什么页面连接到你的网站。</p> <p>在PHP中，获取“来路”信息是非常简单的，我们只需用到referer。HTTP头携带的信息当中包含有一个变量$_SERVER['HTTP_REFERER']，它提供的就是“来路”完整URL地址。以下代码放入你的PHP页面脚本，它就能够打印出连接到该脚本所在页面的具体地址（即“来路”）：</p> <p>&nbsp;&nbsp;&nbsp; $v_url=$HTTP_REFERER;<br/> &nbsp;&nbsp;&nbsp; print $v_url;</p> <p>比如，用户从本站的友情链接点击你的网站，你将得到类似“http://www.php100.com/forum”的URL地址。就这么简单。</p> <p>来路的URL地址可能是很长的。作为来路地址，很多情况下，我们可能只关心它属于哪个网站，即，网站的虚拟主机名叫什么。一个URL地址包含有诸多实体信息，主要有：</p> <p>&nbsp;&nbsp;&nbsp; ·方案（scheme）- HTTP<br/> &nbsp;&nbsp;&nbsp; ·主机（host） - <a href="http://www.php100.com/">http://www.php100.com/</a><br/> &nbsp;&nbsp;&nbsp; ·路径（path） - /forumwww.php100.com，即本站的虚拟主机名。</p> <p>PHP提供一个截取这些实体信息的简便方案：parse_url()函数。parse_url()函数解析一个URL并返回一个数组，该数组就包含有上述实体及其他诸如端口（port）、查询（querry）等信息。试看：</p> <p>&nbsp;&nbsp;&nbsp; $v_url='http://www.php100.com/forum/reg.php'; //待处理的URL地址<br/> &nbsp;&nbsp;&nbsp; $str_ar=parse_url($v_url);<br/> &nbsp;&nbsp;&nbsp; $v_host=$str_ar['host'];<br/> &nbsp;&nbsp;&nbsp; print $v_host;</p> <p>执行以上脚本，浏览器将显示：<br/> <a href="http://www.j2mehome.com/j2me">j2me</a></p></div><img src ="http://www.cnitblog.com/jackery/aggbug/61744.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jackery/" target="_blank">j2meer</a> 2009-10-09 21:23 <a href="http://www.cnitblog.com/jackery/archive/2009/10/09/61744.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>www.j2mehome.com Symbian 程序编程规范和数据类型 </title><link>http://www.cnitblog.com/jackery/archive/2009/08/19/60863.html</link><dc:creator>j2meer</dc:creator><author>j2meer</author><pubDate>Tue, 18 Aug 2009 16:21:00 GMT</pubDate><guid>http://www.cnitblog.com/jackery/archive/2009/08/19/60863.html</guid><wfw:comment>http://www.cnitblog.com/jackery/comments/60863.html</wfw:comment><comments>http://www.cnitblog.com/jackery/archive/2009/08/19/60863.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jackery/comments/commentRss/60863.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jackery/services/trackbacks/60863.html</trackback:ping><description><![CDATA[<div id="Published By Juziyue-[4]1_6D67474172674912A8A0EC1CCDBB31F0_8A4EFB7571774631BDB0CA5D4EEC99E2"><p><strong>Symbian编程规范很大程度上遵循传统的 C++编码规范，除此之外，Symbian应用程序还有自己的一些程序规范：</strong></p> <!--这里插入推荐文章结束--> <p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 1.类名和函数名的第一个字母必须为大写字母，如CSimple类和Printf（）函数。</p> <p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.类成员的变量的第一个字母必须为小写i，如共有变量TInt iVal (TInt 为变量类型)。</p> <p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.函数的形式参数名称第一个字母必须为a，如定义形参变量aInt、aValue。</p> <p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.宏名必须以下划线开头，并且名字中的各个单词之间也要用下划线分开。如宏&nbsp;_UHEAP_MARK、_LIT，另外宏名的每个字母都应该为大写字母。</p> <p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5.常量的第一个字母必须为大写字母K，如KFormat,KFileName等。</p> <p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6.枚举名称以T开头，如THelloWorldCmdAppExit。</p> <p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.函数名称以大写L结尾表示函数在执行时可能会产生异常，如doExampleL()函数。</p> <p align="left">j2me之家 <a href="http://www.j2mehome.com/">http://www.j2mehome.com/</a></p></div><img src ="http://www.cnitblog.com/jackery/aggbug/60863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jackery/" target="_blank">j2meer</a> 2009-08-19 00:21 <a href="http://www.cnitblog.com/jackery/archive/2009/08/19/60863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>symbian开发的一些相关文章</title><link>http://www.cnitblog.com/jackery/archive/2009/08/15/60806.html</link><dc:creator>j2meer</dc:creator><author>j2meer</author><pubDate>Fri, 14 Aug 2009 16:33:00 GMT</pubDate><guid>http://www.cnitblog.com/jackery/archive/2009/08/15/60806.html</guid><wfw:comment>http://www.cnitblog.com/jackery/comments/60806.html</wfw:comment><comments>http://www.cnitblog.com/jackery/archive/2009/08/15/60806.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jackery/comments/commentRss/60806.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jackery/services/trackbacks/60806.html</trackback:ping><description><![CDATA[<div id="Published By Juziyue-[4]1_6A9F83F68C5C4C15889D79F8320B6741_EBDEF88652DD40969E5222ECB9BEE6C2"><p>1998年6月，由爱立信、诺基亚、摩托罗拉和Psion共同出资，筹建了Symbian公司。Symbian公司以开发和供应先进、开放、标准的手机操作系统——Symbian OS为目标。如今，围绕着Symbian OS开发和生产的一系列软硬件产品，在全球掌上电脑和智能手机市场上占据了大部分的份额。如果您对移动开发领域充满好奇，很想一探究竟。那么请随我们一起开始激动人心的Symbian开发之旅。</p> <p>&nbsp;</p> <p><a class="xin" title="Symbian开发专题之工具篇" href="http://www.j2mehome.com/symbian/2009/0814/symbian_tools.html" target="_blank"><font color="#000000" size="2">Symbian开发专题之工具篇</font></a></p> <p>&nbsp;</p> <p><a href="http://www.j2mehome.com/symbian/2009/0814/12369.html" target="_blank"><font color="#000000"><strong>Symbian 开发环境搭建</strong></font></a></p> <p><a href="http://www.j2mehome.com/symbian/2009/0814/12368.html" target="_blank"><font color="#000000"><strong>Symbian 开发工具</strong></font></a></p></div><img src ="http://www.cnitblog.com/jackery/aggbug/60806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jackery/" target="_blank">j2meer</a> 2009-08-15 00:33 <a href="http://www.cnitblog.com/jackery/archive/2009/08/15/60806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开机就能自动启动MIDlet J2ME push实现</title><link>http://www.cnitblog.com/jackery/archive/2009/08/13/60791.html</link><dc:creator>j2meer</dc:creator><author>j2meer</author><pubDate>Thu, 13 Aug 2009 14:25:00 GMT</pubDate><guid>http://www.cnitblog.com/jackery/archive/2009/08/13/60791.html</guid><wfw:comment>http://www.cnitblog.com/jackery/comments/60791.html</wfw:comment><comments>http://www.cnitblog.com/jackery/archive/2009/08/13/60791.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jackery/comments/commentRss/60791.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jackery/services/trackbacks/60791.html</trackback:ping><description><![CDATA[<div id="Published By Juziyue-[4]1_10D33833346B4C0EA4A0F0932FE6A341_10E6E194A03046909E90243300B20042"><p><a href="http://www.j2mehome.com/">J2ME</a>开机自启动功能是通过Push注册来完成的，因此可以使用两种方式来注册。第一种通过在jad文件注明PUSH注册的方式即可，如下。</p> <p>//MIDlet-Push-: , ,<br/> MIDlet-Push-1: autostart://:, AutoStartStatic, *</p> <p>请注意URL的写法是autostart://:</p> <p>如果想动态注册，可以通过下面的方法。</p> <p>//Registers the pushRegistry<br/> public void Register(){<br/> // List of registered push connections.<br/> String connections[];<br/> // Check to see if the connection has been registered.<br/> // This is a dynamic connection allocated on first<br/> // time execution of this MIDlet.<br/> connections = PushRegistry.listConnections(false);<br/> if (connections.length == 0) {<br/> try {<br/> //Register so the MIDlet will wake up when phone is started.<br/> PushRegistry.registerConnection(&quot;autostart://:&quot;, &quot;AutoStartDyn&quot;, &quot;*&quot;);<br/> sDisplayString = &quot;MIDlet is registered&quot;;<br/> } catch (Exception ex) {<br/> System.out.println(&quot;Exception: &quot; + ex);<br/> sDisplayString = &quot;Fail: &quot; + ex;<br/> }<br/> } else {<br/> sDisplayString = &quot;Already registered&quot;;<br/> }<br/> displayForm.deleteAll();<br/> displayForm.append(sDisplayString);<br/> }</p> <p>//Unregisters the pushRegistry<br/> public void Unregister(){<br/> if (PushRegistry.unregisterConnection(&quot;autostart://:&quot;)){<br/> System.out.println(&quot;The pushRegistry is unregistered&quot;);<br/> sDisplayString = &quot;MIDlet is unregistered.&quot;;<br/> }else{<br/> System.out.println(&quot;There is no pushRegistry to unregister&quot;);<br/> sDisplayString = &quot;No MIDlet to unregister or failed to unregister&quot;;<br/> }<br/> displayForm.deleteAll();<br/> displayForm.append(sDisplayString);<br/> }</p> <p>由于手头没有SonyEricsson JP7平台的手机，因此没有办法测试开机自动启动功能。有条件的可以自己测试一下。</p> <p><a href="http://www.j2mehome.com/j2me/jinjie/9268.html">http://www.j2mehome.com/j2me/jinjie/9268.html</a></p></div><img src ="http://www.cnitblog.com/jackery/aggbug/60791.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jackery/" target="_blank">j2meer</a> 2009-08-13 22:25 <a href="http://www.cnitblog.com/jackery/archive/2009/08/13/60791.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>j2me播放音频的代码</title><link>http://www.cnitblog.com/jackery/archive/2009/07/23/60322.html</link><dc:creator>j2meer</dc:creator><author>j2meer</author><pubDate>Thu, 23 Jul 2009 13:14:00 GMT</pubDate><guid>http://www.cnitblog.com/jackery/archive/2009/07/23/60322.html</guid><wfw:comment>http://www.cnitblog.com/jackery/comments/60322.html</wfw:comment><comments>http://www.cnitblog.com/jackery/archive/2009/07/23/60322.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jackery/comments/commentRss/60322.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jackery/services/trackbacks/60322.html</trackback:ping><description><![CDATA[<div id="Published By Juziyue-[4]1_333B1210F6E849A0AFBF0EA17A9F7D48_A187E1FD677E4E45B6E70482FAF895D9"><p><a href="http://www.j2mehome.com/">j2me</a>播放音频的代码import javax.microedition.midlet.*;<br/> import javax.microedition.lcdui.*;<br/> import javax.microedition.media.*;<br/> import java.io.*;</p> <p>public class PlayWav_2 extends MIDlet implements CommandListener {<br/> &nbsp;private Display display;</p> <p>&nbsp;private Form mainForm; // Main form</p> <p>&nbsp;private Command exitCommand; // Command to exit the MIDlet</p> <p>&nbsp;private Command playCommand; // Command to play wav file</p> <p>&nbsp;public PlayWav_2() {<br/> &nbsp;&nbsp;display = Display.getDisplay(this);<br/> &nbsp;&nbsp;<br/> &nbsp;&nbsp;exitCommand = new Command(&quot;Exit&quot;, Command.EXIT, 1);<br/> &nbsp;&nbsp;playCommand = new Command(&quot;Play&quot;, Command.SCREEN, 2);<br/> &nbsp;&nbsp;<br/> &nbsp;&nbsp;mainForm = new Form(&quot;Play WAV file&quot;);<br/> &nbsp;&nbsp;mainForm.addCommand(exitCommand);<br/> &nbsp;&nbsp;mainForm.addCommand(playCommand);<br/> &nbsp;&nbsp;mainForm.setCommandListener(this);<br/> &nbsp;}</p> <p>&nbsp;public void startApp() {<br/> &nbsp;&nbsp;display.setCurrent(mainForm);<br/> &nbsp;}</p> <p>&nbsp;public void pauseApp() {<br/> &nbsp;}</p> <p>&nbsp;public void destroyApp(boolean unconditional) {<br/> &nbsp;}</p> <p>&nbsp;<br/> &nbsp;public void commandAction(Command c, Displayable s) {<br/> &nbsp;&nbsp;if (c == exitCommand) {<br/> &nbsp;&nbsp;&nbsp;destroyApp(false);<br/> &nbsp;&nbsp;&nbsp;notifyDestroyed();<br/> &nbsp;&nbsp;} else if (c == playCommand)<br/> &nbsp;&nbsp;&nbsp;playwavfile();<br/> &nbsp;}</p> <p>&nbsp;<br/> &nbsp;public void playwavfile() {<br/> &nbsp;&nbsp;try {<br/> &nbsp;&nbsp;&nbsp;// 从Jar包中读取wav文件<br/> &nbsp;&nbsp;&nbsp;InputStream in = getClass().getResourceAsStream(&quot;/test.wav&quot;);<br/> &nbsp;&nbsp;&nbsp;//指定文件类型<br/> &nbsp;&nbsp;&nbsp;Player p = Manager.createPlayer(in, &quot;audio/x-wav&quot;);<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p.realize();<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p.prefetch();&nbsp;<br/> &nbsp;&nbsp;&nbsp;p.start();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(p.getState()==300){p.close();}<br/> &nbsp;&nbsp;} catch (Exception e) {</p> <p>&nbsp;&nbsp;&nbsp;Alert alr = new Alert(&quot;错误&quot;, &quot;不能够播放 WAV 文件!&quot;, null,<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AlertType.ERROR);<br/> &nbsp;&nbsp;&nbsp;alr.setTimeout(Alert.FOREVER);<br/> &nbsp;&nbsp;&nbsp;display.setCurrent(alr, mainForm);<br/> &nbsp;&nbsp;}<br/> &nbsp;}<br/> }</p> <p>http://www.j2mehome.com/</p> <p>&nbsp;</p></div><img src ="http://www.cnitblog.com/jackery/aggbug/60322.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jackery/" target="_blank">j2meer</a> 2009-07-23 21:14 <a href="http://www.cnitblog.com/jackery/archive/2009/07/23/60322.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>研究了一下J2ME的文件系统操作（JSR75），对常用操作进行了一下总结。 </title><link>http://www.cnitblog.com/jackery/archive/2009/07/21/60266.html</link><dc:creator>j2meer</dc:creator><author>j2meer</author><pubDate>Tue, 21 Jul 2009 12:46:00 GMT</pubDate><guid>http://www.cnitblog.com/jackery/archive/2009/07/21/60266.html</guid><wfw:comment>http://www.cnitblog.com/jackery/comments/60266.html</wfw:comment><comments>http://www.cnitblog.com/jackery/archive/2009/07/21/60266.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jackery/comments/commentRss/60266.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jackery/services/trackbacks/60266.html</trackback:ping><description><![CDATA[<div id="Published By Juziyue-[4]1_CCC5DBCC62A54AF982D543B9F7A466F9_7C496561DE4F4A8EAB6C5C4FEBAAEC77"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt" xml:lang="EN-US">1</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">）判断 手机是否支持文件系统 </span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt" xml:lang="EN-US">&nbsp;/**<br/> &nbsp; *</span> <span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">检测手机是否支持文件系统<span lang="EN-US" xml:lang="EN-US"><br/> &nbsp; * @return<br/> &nbsp; */<br/> &nbsp;public boolean isSupportFileSystem(){<br/> &nbsp;&nbsp;String v = System<br/> &nbsp;&nbsp;.getProperty(&quot;microedition.io.file.FileConnection.version&quot;);<br/> &nbsp;&nbsp;if(v!=null)return true;<br/> &nbsp;&nbsp;return false;<br/> &nbsp;}<br/> &nbsp;</span>通过判断<span lang="EN-US" xml:lang="EN-US">System</span>的<span lang="EN-US" xml:lang="EN-US">Property</span>是否存在来判断。</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">（<span lang="EN-US" xml:lang="EN-US">2</span>）打开文件连接<span lang="EN-US" xml:lang="EN-US"><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 无论是要读文件还是要写文件，首先必须得到该文件的<span lang="EN-US" xml:lang="EN-US">Connection</span>。<span lang="EN-US" xml:lang="EN-US"><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 使用<span lang="EN-US" xml:lang="EN-US">Connector.open</span>方法，有<span lang="EN-US" xml:lang="EN-US">2</span>个参数，第一个参数是路径，第二个参数是权限。<span lang="EN-US" xml:lang="EN-US"><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 权限没什么好说的了，一共就<span lang="EN-US" xml:lang="EN-US">3</span>个可能：<span lang="EN-US" xml:lang="EN-US">Connector.READ</span>、<span lang="EN-US" xml:lang="EN-US">Connector.WRITE</span>、<span lang="EN-US" xml:lang="EN-US">Connector.READ_WRITE</span>。<span lang="EN-US" xml:lang="EN-US"><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> 现在来说说路径，路径是以<span lang="EN-US" xml:lang="EN-US">URL</span>形式书写的，以<span lang="EN-US" xml:lang="EN-US">&quot;file://&quot;</span>开头，如果是本机上的文件就加上<span lang="EN-US" xml:lang="EN-US">localhost,</span>即如果是<span lang="EN-US" xml:lang="EN-US">E:/a.dat</span>文件的路径应该是<span lang="EN-US" xml:lang="EN-US">&quot;<a href="file:///E:/a.dat"><u><span style="FONT-SIZE: 9pt; COLOR: blue; mso-bidi-font-size: 12.0pt">file://localhost/E:/a.dat</span></u></a>&quot;</span>。</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt" xml:lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">顺便说说手机的目录结果，由于我是使用<span lang="EN-US" xml:lang="EN-US">S60</span>第<span lang="EN-US" xml:lang="EN-US">3</span>版的机器进行测试，所以介绍一下其目录结构。<span lang="EN-US" xml:lang="EN-US">KJava</span>程序可访问的驱动器就<span lang="EN-US" xml:lang="EN-US">2</span>个：<span lang="EN-US" xml:lang="EN-US">C</span>和<span lang="EN-US" xml:lang="EN-US">E</span>（如果有扩展卡）。<span lang="EN-US" xml:lang="EN-US">E</span>驱动器下所有目录文件都可以访问，路径是<span lang="EN-US" xml:lang="EN-US">E:/</span>开始；<span lang="EN-US" xml:lang="EN-US">C</span>驱动则不是，只有图片、声音和影像三个目录可以访问，访问其它目录将抛<span lang="EN-US" xml:lang="EN-US">SecurityException</span>，其这三个目录的路径分别是<span lang="EN-US" xml:lang="EN-US">C:/data/Images</span>、<span lang="EN-US" xml:lang="EN-US">C:/data/Sounds</span>、<span lang="EN-US" xml:lang="EN-US">C:/data/Videos</span>。怎么知道有哪些目录可以访问呢，很简单把<span lang="EN-US" xml:lang="EN-US">WTK</span>自带的<span lang="EN-US" xml:lang="EN-US">PDADemo</span>放在手机上，运行<span lang="EN-US" xml:lang="EN-US">FileBrowser</span>测试一下就行了。</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt" xml:lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileConnection fc = (FileConnection)<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connector.open(file://localhost/E:/a.dat&nbsp; , Connector_READ_WRITE);</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">（<span lang="EN-US" xml:lang="EN-US">3</span>）读文件<span lang="EN-US" xml:lang="EN-US"><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStream fis = fc.openInputStream();&nbsp;&nbsp;&nbsp;&nbsp;</span></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt" xml:lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">很简单，就是用<span lang="EN-US" xml:lang="EN-US">openInputStream</span>打开一个流，和读取网络数据一样，这里就不赘述了。<span lang="EN-US" xml:lang="EN-US"><br/></span>（<span lang="EN-US" xml:lang="EN-US">4</span>）写文件</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt" xml:lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] b=&quot;Hello World&quot;.getBytes();</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt" xml:lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutputStream fos = fc.openOutputStream();&nbsp;&nbsp;&nbsp;</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt" xml:lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fos.write(b,0,b.length);</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 18pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt" xml:lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">使用方法也是和写网络数据一样，打开一个<span lang="EN-US" xml:lang="EN-US">OutputStream</span>就可以了，不过有一点要注意的（在<span lang="EN-US" xml:lang="EN-US">N93</span>上测试的结果，其它机器不清楚），写文件总是从开头开始写，而且不会清空原来的内容。例如本来文件中有内容<span lang="EN-US" xml:lang="EN-US">abcdefghijk,</span>再打开文件往里面写入<span lang="EN-US" xml:lang="EN-US">123</span>，最后文件的内容是什么呢？不是<span lang="EN-US" xml:lang="EN-US">abcdefghijk123</span>，也不是<span lang="EN-US" xml:lang="EN-US">123</span>，而是<span lang="EN-US" xml:lang="EN-US">123defghijk</span>。那么需要续写文件怎么办？我的做法的先把原内容读出到一个<span lang="EN-US" xml:lang="EN-US">StringBuffer</span>中，再续写在<span lang="EN-US" xml:lang="EN-US">StringBuffer</span>里，再写入文件，不知道还有没有更方便的方法。</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" xml:lang="EN-US"><font face="Times New Roman">&nbsp;</font></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" xml:lang="EN-US"><font face="Times New Roman">&nbsp;</font></span></p> <p style="LINE-HEIGHT: 18pt"><span style="FONT-SIZE: 10.5pt; COLOR: black">这段时间因为开发上要用到本地文件，因此开始接触<span lang="EN-US" xml:lang="EN-US"><a href="http://www.j2mehome.com/j2me/jichu/10448.html">Jsr75</a></span>的包，<span lang="EN-US" xml:lang="EN-US">Jsr75</span>分两个部分，一部分是<span lang="EN-US" xml:lang="EN-US">File</span>，即本地文件系统，一部分是<span lang="EN-US" xml:lang="EN-US">PIM</span>，说白了就是电话本之类的信息，我先学习的是<span lang="EN-US" xml:lang="EN-US">File</span>部分，通过<span lang="EN-US" xml:lang="EN-US">import javax.microedition.io.file.*</span>里的包，可以实现自由访问本机的文件系统，就跟<span lang="EN-US" xml:lang="EN-US">Windos</span>里的资源管理器一样，在这里我介绍几个我写的方法</span></p> <p style="LINE-HEIGHT: 18pt"><span style="FONT-SIZE: 10.5pt; COLOR: black">一<span lang="EN-US" xml:lang="EN-US">.</span>获取指定路径的目录和文件列表</span></p> <p style="LINE-HEIGHT: 18pt"><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black" xml:lang="EN-US">&nbsp;/*</span><span style="FONT-SIZE: 10.5pt; COLOR: black">目录文件列表<span lang="EN-US" xml:lang="EN-US">*/<br/> &nbsp;public Vector list(String path)<br/> &nbsp;{<br/> &nbsp;&nbsp;try<br/> &nbsp;&nbsp;{<br/> &nbsp;&nbsp;&nbsp;FileConnection fc=(FileConnection)(Connector.open(path));<br/> &nbsp;&nbsp;&nbsp;if(fc.exists())<br/> &nbsp;&nbsp;&nbsp;{<br/> &nbsp;&nbsp;&nbsp;&nbsp;Vector listVec=new Vector(0,1);<br/> &nbsp;&nbsp;&nbsp;&nbsp;Enumeration en=fc.list();<br/> &nbsp;&nbsp;&nbsp;&nbsp;while(en.hasMoreElements())<br/> &nbsp;&nbsp;&nbsp;&nbsp;{<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listVec.addElement((String)(en.nextElement()));<br/> &nbsp;&nbsp;&nbsp;&nbsp;}<br/> &nbsp;&nbsp;&nbsp;&nbsp;return listVec;<br/> &nbsp;&nbsp;&nbsp;}<br/> &nbsp;&nbsp;&nbsp;else<br/> &nbsp;&nbsp;&nbsp;return null;<br/> &nbsp;&nbsp;}<br/> &nbsp;&nbsp;catch(Exception e)<br/> &nbsp;&nbsp;{<br/> &nbsp;&nbsp;&nbsp;System.out.println(&quot;listErr:&quot;+e.toString());<br/> &nbsp;&nbsp;&nbsp;return null;&nbsp;&nbsp;&nbsp;<br/> &nbsp;&nbsp;}<br/> &nbsp;}</span></span></p> <p style="LINE-HEIGHT: 18pt"><span style="FONT-SIZE: 10.5pt; COLOR: black">方法里的<span lang="EN-US" xml:lang="EN-US">path</span>参数就是要查找的路径，比如<span lang="EN-US" xml:lang="EN-US"><a href="file:///c:/pictures/"><u><span style="FONT-SIZE: 9pt; COLOR: blue">file:///c:/pictures/</span></u></a></span>，切记，如果是目录<span lang="EN-US" xml:lang="EN-US">Path</span>，那么后面的<span lang="EN-US" xml:lang="EN-US">/</span>一定不能省，否则会查找不到内容。这个方法返回的是一个包含了指定<span lang="EN-US" xml:lang="EN-US">Path</span>下的所有目录名和文件名的向量。</span></p> <p style="LINE-HEIGHT: 18pt"><span style="FONT-SIZE: 10.5pt; COLOR: black">二<span lang="EN-US" xml:lang="EN-US">.</span>建立或者保存一个文件到指定路径</span></p> <p style="LINE-HEIGHT: 18pt"><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black" xml:lang="EN-US">&nbsp;/*</span><span style="FONT-SIZE: 10.5pt; COLOR: black">保存文件<span lang="EN-US" xml:lang="EN-US">*/<br/> &nbsp;public void saveFile(String path,byte[] fileData)<br/> &nbsp;{<br/> &nbsp;&nbsp;try<br/> &nbsp;&nbsp;{<br/> &nbsp;&nbsp;&nbsp;FileConnection fc=(FileConnection)(Connector.open(path));<br/> &nbsp;&nbsp;&nbsp;fc.create();<br/> &nbsp;&nbsp;&nbsp;fc.setWritable(true);<br/> &nbsp;&nbsp;&nbsp;OutputStream os=fc.openOutputStream();<br/> &nbsp;&nbsp;&nbsp;os.write(fileData);<br/> &nbsp;&nbsp;&nbsp;os.close();<br/> &nbsp;&nbsp;}<br/> &nbsp;&nbsp;catch(Exception e)<br/> &nbsp;&nbsp;{<br/> &nbsp;&nbsp;&nbsp;System.out.println(&quot;saveFileErr:&quot;+e.toString());<br/> &nbsp;&nbsp;}<br/> &nbsp;}&nbsp;</span></span></p> <p style="LINE-HEIGHT: 18pt"><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black" xml:lang="EN-US">fileData</span><span style="FONT-SIZE: 10.5pt; COLOR: black">是需要保存的文件内容，可以是声音，也可以是图像，或者文字之类</span></p> <p><a href="http://www.j2mehome.com/j2me/jichu/10448.html">http://www.j2mehome.com/j2me/jichu/10448.html</a></p></div><img src ="http://www.cnitblog.com/jackery/aggbug/60266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jackery/" target="_blank">j2meer</a> 2009-07-21 20:46 <a href="http://www.cnitblog.com/jackery/archive/2009/07/21/60266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>S60/Symbian应用程序常用架构/框架</title><link>http://www.cnitblog.com/jackery/archive/2009/07/21/60265.html</link><dc:creator>j2meer</dc:creator><author>j2meer</author><pubDate>Tue, 21 Jul 2009 11:59:00 GMT</pubDate><guid>http://www.cnitblog.com/jackery/archive/2009/07/21/60265.html</guid><wfw:comment>http://www.cnitblog.com/jackery/comments/60265.html</wfw:comment><comments>http://www.cnitblog.com/jackery/archive/2009/07/21/60265.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jackery/comments/commentRss/60265.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jackery/services/trackbacks/60265.html</trackback:ping><description><![CDATA[<div id="Published By Juziyue-[4]1_C4C1B4819B084955A05E19A565651A51_790E63EAC0744FBD953357CC4EF3CF28"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">所谓<span lang="EN-US" xml:lang="EN-US">“</span>应用程序架构<span lang="EN-US" xml:lang="EN-US">”</span>是指应用程序框架类的集合。基于所需的<span lang="EN-US" xml:lang="EN-US">UI</span>设计，应用程序可以具有稍微不同的架构，但是每种架构都有一些公共部分，称为<span lang="EN-US" xml:lang="EN-US">“</span>核心应用程序类<span lang="EN-US" xml:lang="EN-US">”</span></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　<strong>　一、先看一下基础部分，具体架构在第二部分介绍</strong></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　（<span lang="EN-US" xml:lang="EN-US">1</span>）核心应用程序类<span lang="EN-US" xml:lang="EN-US">.</span></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　所有的<span lang="EN-US" xml:lang="EN-US">S60&nbsp;UI</span>应用程序都具有一些基本功能：</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　提供一个用户界面，用于显示信息并允许用户进行交互</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　响应各种用户启动的事件，比如用户选择一个菜单项</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　响应系统启动的不同事件，比如导致屏幕重绘的<span lang="EN-US" xml:lang="EN-US">window</span>服务器事件</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　能够保存和恢复应用程序数据</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　可以唯一性的向框架标志自身</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　向框架提供有关应用程序的描述性信息，比如图标和标题等</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　这些类是：视图（<span lang="EN-US" xml:lang="EN-US">View</span>）、文档（<span lang="EN-US" xml:lang="EN-US">Document</span>）、应用程序（<span lang="EN-US" xml:lang="EN-US">Application</span>）、应用程序<span lang="EN-US" xml:lang="EN-US">UI</span>（<span lang="EN-US" xml:lang="EN-US">Application&nbsp;UI</span>）。</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　一个程序只能有一个文档，可以有多个视图。</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　（<span lang="EN-US" xml:lang="EN-US">2</span>）应用程序初始化</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　必须创建下面的每个方法，才能提供最小的<span lang="EN-US" xml:lang="EN-US">S60</span>应用程序：</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　<span lang="EN-US" xml:lang="EN-US">a</span>、所有<span lang="EN-US" xml:lang="EN-US"><a href="http://www.j2mehome.com/symbian">S60</a>&nbsp;UI</span>都实现一个全局函数<span lang="EN-US" xml:lang="EN-US">E32DLL</span>（），当应用程序启动时，框架将首先调用该函数，该函数也称为<span lang="EN-US" xml:lang="EN-US">DLL</span>入口点，应用程序必须存在该函数。每个<span lang="EN-US" xml:lang="EN-US">S60&nbsp;UI&nbsp;</span>应用程序都是一个多态<span lang="EN-US" xml:lang="EN-US">DLL</span>。</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　<span lang="EN-US" xml:lang="EN-US">b</span>、让框架调用<span lang="EN-US" xml:lang="EN-US">NewApplication</span>（），该函数是由<span lang="EN-US" xml:lang="EN-US">DLL</span>导出的唯一函数。</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　<span lang="EN-US" xml:lang="EN-US">c</span>、创建应用程序类的一个实例，并返回它的指针，以后框架使用该指针完成应用程序的创建。</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　<span lang="EN-US" xml:lang="EN-US">d</span>、由框架调用<span lang="EN-US" xml:lang="EN-US">AppDllUid</span>（）返回应用程序的<span lang="EN-US" xml:lang="EN-US">UID</span>。该函数必须返回在<span lang="EN-US" xml:lang="EN-US">.mmp</span>文件中指定的值，并且可用于确定应用程序的实例是否正在运行。</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　<span lang="EN-US" xml:lang="EN-US">e</span>、框架获取指向新创建<span lang="EN-US" xml:lang="EN-US">Document</span>类的指针，<span lang="EN-US" xml:lang="EN-US">CreateDocumentL</span>（）。</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　<span lang="EN-US" xml:lang="EN-US">f</span>、<span lang="EN-US" xml:lang="EN-US">NewL</span>（）具体去创建</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　<span lang="EN-US" xml:lang="EN-US">g</span>、矿见获取<span lang="EN-US" xml:lang="EN-US">AppUi</span>类的指针，<span lang="EN-US" xml:lang="EN-US">CreateAppUiL</span>（）。</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　<span lang="EN-US" xml:lang="EN-US">h</span>、由<span lang="EN-US" xml:lang="EN-US">new&nbsp;</span>（<span lang="EN-US" xml:lang="EN-US">Eleave</span>）<span lang="EN-US" xml:lang="EN-US">CappUi</span>（）具体创建。</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　这样一个最简短直观的框架就创建完毕。</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　（<span lang="EN-US" xml:lang="EN-US">3</span>）重要的<span lang="EN-US" xml:lang="EN-US">AppUi</span>方法：</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　<span lang="EN-US" xml:lang="EN-US">AppUi</span>提供了许多方法，框架可以调用这些方法通知每个应用程序各种事件。</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　<span lang="EN-US" xml:lang="EN-US">HandKeyEvent</span>（）用于处理用户按键</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　<span lang="EN-US" xml:lang="EN-US">HandleForegroundEventL</span>（）当应用程序切换到前台或从前台切换到后台时调用该函数，默认的实现可以处理键盘焦点的改变。</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　<span lang="EN-US" xml:lang="EN-US">HandleSystemEventL</span>（）传递由窗口服务器生成的事件</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　<span lang="EN-US" xml:lang="EN-US">HandleApplicationSpecificEventL</span>（）可以自己定义的自定义事件的通知。默认的实现可以处理颜色方案改变的通知。</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　<span lang="EN-US" xml:lang="EN-US">HandleCommandL</span>（）用于处理用户选择的菜单项</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　（<span lang="EN-US" xml:lang="EN-US">4</span>）设计应用程序<span lang="EN-US" xml:lang="EN-US">UI</span></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　关于术语<span lang="EN-US" xml:lang="EN-US">“</span>视图（<span lang="EN-US" xml:lang="EN-US">view</span>）<span lang="EN-US" xml:lang="EN-US">”</span>：</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　<span lang="EN-US" xml:lang="EN-US">“</span>视图<span lang="EN-US" xml:lang="EN-US">”</span>是概念性的术语，含义是<span lang="EN-US" xml:lang="EN-US">“</span>数据模型在屏幕上的表示<span lang="EN-US" xml:lang="EN-US">”</span>，实际上由一个或多个从<span lang="EN-US" xml:lang="EN-US">CcoeControl</span>派生而来的<span lang="EN-US" xml:lang="EN-US">UI</span>控件实现视图，这些控件按层次结构进行组织。父控件通常被称为容器（<span lang="EN-US" xml:lang="EN-US">Container</span>），除了用于实现视图的父控件，这种控件被称为对话框（<span lang="EN-US" xml:lang="EN-US">Dialog</span>）</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　在<span lang="EN-US" xml:lang="EN-US">Avkon</span>视图切换架构中，术语<span lang="EN-US" xml:lang="EN-US">“Avkon</span>视图<span lang="EN-US" xml:lang="EN-US">”</span>指的是系统范围内的<span lang="EN-US" xml:lang="EN-US">View</span>服务器注册的类，它控制视图的实例化和析构。</span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　<strong>　二、常见的<span lang="EN-US" xml:lang="EN-US"><a href="http://www.j2mehome.com/symbian">symbian</a></span>应用程序架构：</strong></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　每种架构都提供了设计应用程序<span lang="EN-US" xml:lang="EN-US">UI</span>的不同方法<span lang="EN-US" xml:lang="EN-US">――</span>所有的架构都提供了提交<span lang="EN-US" xml:lang="EN-US">“</span>视图<span lang="EN-US" xml:lang="EN-US">”</span>或应用程序数据可视化表示的方法，同时提供了一种用户用来与架构进行交互的机制。</span></p> <p><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">　　先简单认识一下：基于对话框的架构和传统的基于<span lang="EN-US" xml:lang="EN-US">Symbian&nbsp;OS</span>的架构虽不相同，但和<span lang="EN-US" xml:lang="EN-US">Avkon</span>视图切换架构相比，这两种架构彼此更为类似。<a href="http://www.j2mehome.com/symbian">Symbian开发</a>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.j2mehome.com/system/symbian/">Symbian系统</a></span></p> <p><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><a href="http://www.j2mehome.com/">http://www.j2mehome.com/</a></span></p> <p>&nbsp;</p></div><img src ="http://www.cnitblog.com/jackery/aggbug/60265.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jackery/" target="_blank">j2meer</a> 2009-07-21 19:59 <a href="http://www.cnitblog.com/jackery/archive/2009/07/21/60265.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自己总结的一些J2ME开发经验点滴</title><link>http://www.cnitblog.com/jackery/archive/2009/07/16/60153.html</link><dc:creator>j2meer</dc:creator><author>j2meer</author><pubDate>Thu, 16 Jul 2009 11:51:00 GMT</pubDate><guid>http://www.cnitblog.com/jackery/archive/2009/07/16/60153.html</guid><wfw:comment>http://www.cnitblog.com/jackery/comments/60153.html</wfw:comment><comments>http://www.cnitblog.com/jackery/archive/2009/07/16/60153.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jackery/comments/commentRss/60153.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jackery/services/trackbacks/60153.html</trackback:ping><description><![CDATA[<div id="Published By Juziyue-[4]1_5DCD2CAA005C4761A6964D2B4F6E5708_7DC9FA7451C446D5AC96A98F7079FD46"><p>想实现一个UI，提示用户输入PIN码，输入完后函数返回用户输入的PIN码。代码如下：</p> <p>public class PinInputForm<br/> &nbsp;extends Form<br/> &nbsp;implements CommandListener<br/> {</p> <p>......</p> <p>&nbsp;public String GetInputPIN(Display display)<br/> &nbsp;{<br/> &nbsp; //show dialog<br/> &nbsp; Displayable prevUi= display.getCurrent();<br/> &nbsp; display.setCurrent(this);<br/> &nbsp; //wait for &quot;ok&quot;<br/> &nbsp; synchronized(this){<br/> &nbsp;&nbsp; try{<br/> &nbsp;&nbsp;&nbsp; wait();<br/> &nbsp;&nbsp; }catch(Exception e){}<br/> &nbsp; }<br/> &nbsp; display.setCurrent(prevUi);<br/> &nbsp; return m_strRet;<br/> &nbsp;}<br/> &nbsp;public void commandAction(Command c, Displayable s)<br/> &nbsp;{<br/> &nbsp; if(c==m_CancelCommand)<br/> &nbsp; {<br/> &nbsp;&nbsp; m_strRet=null;<br/> &nbsp;&nbsp; synchronized(this){<br/> &nbsp;&nbsp;&nbsp; notify();<br/> &nbsp;&nbsp; }<br/> &nbsp; }<br/> &nbsp; else if(c==m_OkCommand)<br/> &nbsp; {<br/> &nbsp;&nbsp; m_strRet= m_txtBoxPIN.getString();<br/> &nbsp;&nbsp; synchronized(this){<br/> &nbsp;&nbsp;&nbsp; notify();<br/> &nbsp;&nbsp; }<br/> &nbsp; }<br/> &nbsp;}<br/> }</p> <p>这在Windows下很好实现，只要一个模式对话框就可以。但发现在J2ME环境下，竟然无法实现。原因是：<a href="http://www.j2mehome.com/j2me/">J2ME</a>为Midlet提供一个UI线程，且仅有一个。如果用户在该线程下阻塞，Midlet就得不到再次调度</p> <p>系统原理如下：</p> <p>&nbsp;</p> <p>经过调用Connet后：</p> <p>&nbsp;</p> <p>如果在connet处阻塞的话，系统线程就出不来了</p> <p>来源：<a href="http://www.j2mehome.com/">http://www.j2mehome.com/</a>&nbsp;<a href="http://www.j2mehome.com/j2me/">j2me教程</a>&nbsp;<a href="http://www.j2mehome.com/j2me/cldc.html">CLDC</a></p> <p>&nbsp;</p></div><img src ="http://www.cnitblog.com/jackery/aggbug/60153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jackery/" target="_blank">j2meer</a> 2009-07-16 19:51 <a href="http://www.cnitblog.com/jackery/archive/2009/07/16/60153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Symbian近期推Beta版开源Symbian</title><link>http://www.cnitblog.com/jackery/archive/2009/07/16/60152.html</link><dc:creator>j2meer</dc:creator><author>j2meer</author><pubDate>Thu, 16 Jul 2009 11:48:00 GMT</pubDate><guid>http://www.cnitblog.com/jackery/archive/2009/07/16/60152.html</guid><wfw:comment>http://www.cnitblog.com/jackery/comments/60152.html</wfw:comment><comments>http://www.cnitblog.com/jackery/archive/2009/07/16/60152.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jackery/comments/commentRss/60152.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jackery/services/trackbacks/60152.html</trackback:ping><description><![CDATA[<div id="Published By Juziyue-[4]1_803AD57D1E61418C9CBA5954AA9A094B_F3AC221B79CD4524996F4EF9804B595C"><div id="vogate_ad_area"> <p>北京时间7月10日上午消息，据国外媒体昨日报道，希望被苹果iPhone和谷歌Android的势头压过。这两家竞争对手此前都已经推出了软件开发工具包并开办了应用商店。</p> </div> <p>亚1年前收购了<a href="http://www.j2mehome.com/symbian">Symbian</a>，并将其打造成非赢利性组织Symbian基金会，而本次Beta版的Symbian^2将是该基金会的首个成果。Symbian基金会的目的是希望创建一款开源手机操作系统，可以被所有手机厂商</p> <div id="vogate_ad_area"> <p>制订了非常积极的更新时间表。伍德预计，Symbian^2每半年就会进行一次升级以提升功能。伍德说，尽管从技术层面说，Symbian^2可以在部分现有的设备上运行，但最终的决策仍然取决于手机厂商和运营商。</p> </div> <p><!-- 这篇新闻中是否有争论或者观点交锋呢？如果希望读者参与，请点击<a href="http://pkzone.csdn.net/AdminManage/Editor_Apply.aspx">这里</a>，创建一个观点PK --></p> <p>Symbian基金会执行副总裁大卫伍德(David Wood)称，开源Symbian操作系统的Beta版本将于未来几周内发布。</p> <p>伍德说，正式版的开源<a href="http://www.j2mehome.com/system/symbian/">Symbian系统</a>将在6个月后发布，搭配该系统的手机将于2010年初面世。这款名为Symbian^2的开源系统将整合之前版本的Symbian以及诺基亚S60、MOAP和UIQ等多款系统的元素。</p> <p>诺基Symbian基金会还为该系统的智能手机操作系统，诺基亚却不</p> <p>尽管Symbian仍然是全球使用最广泛</p> <p>采用。该基金会的成员包括ATT、三星、LG电子、沃达丰和其他在业内颇具影响力的厂商。</p> <p><a href="http://www.j2mehome.com/">http://www.j2mehome.com/</a></p> <p>&nbsp;</p></div><img src ="http://www.cnitblog.com/jackery/aggbug/60152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jackery/" target="_blank">j2meer</a> 2009-07-16 19:48 <a href="http://www.cnitblog.com/jackery/archive/2009/07/16/60152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>