﻿<?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>BlogJava-饶荣庆 -- 3geye.net-随笔分类-j2me</title><link>http://www.blogjava.net/gooogle/category/20855.html</link><description> &lt;a href="http://www.3geye.net"&gt;&lt;color ="0xFFFFFF"&gt;3G 手机开发网&lt;/color&gt;&lt;/a&gt;</description><language>zh-cn</language><lastBuildDate>Tue, 27 May 2008 20:19:16 GMT</lastBuildDate><pubDate>Tue, 27 May 2008 20:19:16 GMT</pubDate><ttl>60</ttl><item><title>探讨J2ME 流媒体的实现</title><link>http://www.blogjava.net/gooogle/archive/2008/05/27/203127.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Tue, 27 May 2008 02:11:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2008/05/27/203127.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/203127.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2008/05/27/203127.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/203127.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/203127.html</trackback:ping><description><![CDATA[<p>作者：wuhua<br />
空间：<a href="htt://wuhua.3geye.net" target="_blank">htt://wuhua.3geye.net</a>
<br />
转载请保留上面的信息（请尊重知识产品）谢谢</p>
<p>记得以前看过一篇高手写的文章。</p>
<p><a href="http://www.cnblogs.com/zhengyun_ustc/archive/2006/03/28/j2me_streaming_demo.html" target="_blank">http://www.cnblogs.com/zhengyun_ustc/archive/2006/03/28/j2me_streaming_demo.html</a></p>
<p>这种思想需要用到两个线程去控制视频的播放，感觉思路是好的，不过比较复杂。</p>
<p>上个礼拜我结合了上面高手的思路，自己总结了另外一直播放的方式。 那就是队列的方式。</p>
<p>我们可以采用一些元数据的描述方式。来指导媒体播放类型，播放名车，已经播放路径，播放队列的。我们的程序只需要解释下这个元数据，并且按照这种元素局的格式来获取媒体播放队列，最后采用一个线程构造播放队列的方式进行播放。</p>
<p>下面看看我是怎么样描述这些数据的</p>
<p>&lt;root name="wuhua"&gt;<br />
&lt;li url="/video.xml"&gt;MTV&lt;/li&gt;<br />
&lt;li url="/music.xml"&gt;MUSIC&lt;/li&gt;<br />
&lt;/root&gt;</p>
<p>上面的是一些xml播放列表描述文件。</p>
<p>这段是指定一些参数以及一些媒体编码。跟播放队列。</p>
<p>&lt;video name="信乐团--离歌" desc="about" encode="audio/x-wav" &gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/0.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/1.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/2.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/3.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/4.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/5.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/6.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/7.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/8.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/9.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/10.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/11.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/12.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/13.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/14.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/15.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/16.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/17.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/18.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/19.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/20.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/21.wav&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/22.wav&lt;/item&gt;&nbsp;&nbsp; &nbsp;<br />
&lt;/video&gt;</p>
<p>这是一部小电影的播放队列</p>
<p>&lt;video name="一部很简单的电影" desc="about" encode="video/mpeg" &gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/0.mpg&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/1.mpg&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/2.mpg&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/3.mpg&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/4.mpg&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/5.mpg&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/6.mpg&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/7.mpg&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/8.mpg&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/9.mpg&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/10.mpg&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/11.mpg&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/12.mpg&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/13.mpg&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/14.mpg&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;item&gt;/15.mpg&lt;/item&gt;<br />
&lt;/video&gt;</p>
<p>我基本已经实现了上面的流媒体播放方式，不过在测试的过程中发现在播放音频，或者视频设备的时候，感觉到</p>
<p>两个Player之间切换有点卡，大概卡那么0.1秒。暂时还没有想到解决办法。 </p>
<p>有好东西需要跟大家分享。你有好思路吗，大家分享下吧。</p>
<p>PS： 实现上面的流媒体方法，采用了EasyMF 框架</p><img src ="http://www.blogjava.net/gooogle/aggbug/203127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2008-05-27 10:11 <a href="http://www.blogjava.net/gooogle/archive/2008/05/27/203127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>七个优秀的开源J2ME项目</title><link>http://www.blogjava.net/gooogle/archive/2008/04/10/191876.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Thu, 10 Apr 2008 07:20:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2008/04/10/191876.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/191876.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2008/04/10/191876.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/191876.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/191876.html</trackback:ping><description><![CDATA[<h2><br />
</h2>
<h2>文章出处：<a href="http://www.3geye.net/?3/viewspace-3347">http://www.3geye.net/?3/viewspace-3347</a>
<br />
</h2>
<h2>MWT</h2>
<p>Micro Window
Toolkit(MWT)是一个用于开发<a onclick="javascript:tagshow(event, 'J2ME');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>J2ME</strong>
</span>
</a>
用户界面(UI)的工具包。它具有友好，强大，快速，<a onclick="javascript:tagshow(event, '%BF%AA%D4%B4');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>开源</strong>
</span>
</a>
等特性。因为它的"灵感"来自
AWT，Swing和SWT。可以使用bitmap fonts等来自定义组件。它专门为嵌入式开发而设计和优化。基于LGPL发布。<br />
<span style="display: none;">K[Lr%sRI3</span>
项目地址：<a href="http://j2me-mwt.sourceforge.net/" target="_blank">http://j2me-mwt.sourceforge.net/</a>
</p>
<p><a href="http://j2me-mwt.sourceforge.net/" target="_blank"><br />
<span style="display: none;">	V4TD6Y.n3?h*H3</span>
</a>
</p>
<table align="center" border="0">
    <tbody>
        <tr>
            <td class="title" colspan="4">1 - J2ME Desktop:</td>
        </tr>
        <tr>
            <td><img style="cursor: pointer;" src="http://j2me-mwt.sourceforge.net/img/demo1-1.png" alt="" title="点击图片可在新窗口打开" />
            </td>
            <td><img style="cursor: pointer;" src="http://j2me-mwt.sourceforge.net/img/demo1-2.png" alt="" title="点击图片可在新窗口打开" />
            </td>
            <td><img style="cursor: pointer;" src="http://j2me-mwt.sourceforge.net/img/demo1-3.png" alt="" title="点击图片可在新窗口打开" />
            </td>
            <td><img style="cursor: pointer;" src="http://j2me-mwt.sourceforge.net/img/demo1-4.png" alt="" title="点击图片可在新窗口打开" />
            </td>
        </tr>
        <tr>
            <td colspan="4">Download the<a href="http://j2me-mwt.sourceforge.net/demos/demo1.jad">Jad</a>
            and<a onclick="javascript:tagshow(event, 'Jar');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>Jar</strong>
            </span>
            </a>
            or view it with<a href="http://webstart.mpowerplayer.com/j2me-mwt.sourceforge.net/demos/demo1.jad.jnlp">Java WebStart</a>
            </td>
        </tr>
    </tbody>
</table>
<br />
<span style="display: none;">$?i6_7iPGl3U~3</span>
<table align="center" border="0">
    <tbody>
        <tr>
            <td class="title" colspan="4">2 - ELP ~ RPG:</td>
        </tr>
        <tr>
            <td><img style="cursor: pointer;" src="http://j2me-mwt.sourceforge.net/img/demo2-1.png" alt="" title="点击图片可在新窗口打开" />
            </td>
            <td><img style="cursor: pointer;" src="http://j2me-mwt.sourceforge.net/img/demo2-2.png" alt="" title="点击图片可在新窗口打开" />
            </td>
            <td><img style="cursor: pointer;" src="http://j2me-mwt.sourceforge.net/img/demo2-3.png" alt="" title="点击图片可在新窗口打开" />
            </td>
            <td><img style="cursor: pointer;" src="http://j2me-mwt.sourceforge.net/img/demo2-4.png" alt="" title="点击图片可在新窗口打开" />
            </td>
        </tr>
        <tr>
            <td colspan="4">Download the<a href="http://j2me-mwt.sourceforge.net/demos/demo2.jad">Jad</a>
            and<a href="http://j2me-mwt.sourceforge.net/demos/demo2.jar">Jar</a>
            or view it with<a href="http://webstart.mpowerplayer.com/j2me-mwt.sourceforge.net/demos/demo2.jad.jnlp">Java WebStart</a>
            </td>
        </tr>
    </tbody>
</table>
<br />
<span style="display: none;">JZCQYxT3</span>
<table align="center" border="0">
    <tbody>
        <tr>
            <td class="title" colspan="4">3 - Progress Bar:</td>
        </tr>
        <tr>
            <td><img style="cursor: pointer;" src="http://j2me-mwt.sourceforge.net/img/demo3-1.png" alt="" title="点击图片可在新窗口打开" />
            </td>
            <td><img style="cursor: pointer;" src="http://j2me-mwt.sourceforge.net/img/demo3-2.png" alt="" title="点击图片可在新窗口打开" />
            </td>
            <td><img style="cursor: pointer;" src="http://j2me-mwt.sourceforge.net/img/demo3-3.png" alt="" title="点击图片可在新窗口打开" />
            </td>
            <td><img style="cursor: pointer;" src="http://j2me-mwt.sourceforge.net/img/demo3-4.png" alt="" title="点击图片可在新窗口打开" />
            </td>
        </tr>
        <tr>
            <td colspan="4">Download the<a href="http://j2me-mwt.sourceforge.net/demos/demo3.jad">Jad</a>
            and<a href="http://j2me-mwt.sourceforge.net/demos/demo3.jar">Jar</a>
            or view it with<a href="http://webstart.mpowerplayer.com/j2me-mwt.sourceforge.net/demos/demo3.jad.jnlp">Java WebStart</a>
            </td>
        </tr>
    </tbody>
</table>
<span style="display: none;">3GEYEV/[+_Q?"D[N6i</span>
<br />
<table align="center" border="0">
    <tbody>
        <tr>
            <td class="title" colspan="4">4 - Messenger Interface:</td>
        </tr>
        <tr>
            <td><img style="cursor: pointer;" src="http://j2me-mwt.sourceforge.net/img/demo4-1.png" alt="" title="点击图片可在新窗口打开" />
            </td>
            <td><img style="cursor: pointer;" src="http://j2me-mwt.sourceforge.net/img/demo4-2.png" alt="" title="点击图片可在新窗口打开" />
            </td>
            <td><img style="cursor: pointer;" src="http://j2me-mwt.sourceforge.net/img/demo4-3.png" alt="" title="点击图片可在新窗口打开" />
            </td>
            <td><img style="cursor: pointer;" src="http://j2me-mwt.sourceforge.net/img/demo4-4.png" alt="" title="点击图片可在新窗口打开" />
            </td>
        </tr>
        <tr>
            <td colspan="4">Download the<a href="http://j2me-mwt.sourceforge.net/demos/demo4.jad">Jad</a>
            and<a href="http://j2me-mwt.sourceforge.net/demos/demo4.jar">Jar</a>
            or view it with<a href="http://webstart.mpowerplayer.com/j2me-mwt.sourceforge.net/demos/demo4.jad.jnlp">Java WebStart</a>
            </td>
        </tr>
    </tbody>
</table>
<h1>J4ME-开源的UI Logger 项目</h1>
<p>J4ME
是一个J2ME应用程序开发包。它包括一个UI框架，一个日记框架用于帮助调试因不同品牌<a onclick="javascript:tagshow(event, '%CA%D6%BB%FA');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>手机</strong>
</span>
</a>
的差异而产生的问题，一个蓝牙GPS框架让你能够利
用JSR-179 Location
API接口从蓝牙GPS设备获取定位信息和一个Java类包其中包含了J2ME中没有的方法比如双精度型数字的计算等。<br />
<span style="display: none;">a7Oi6k^Z	u3</span>
<a rel="lightbox" href="http://www.kaiyuan8.org/upload/2008/2/ui.gif" title="ui.gif"><img id="urn:zoundry:jid:ui.gif" src="http://www.kaiyuan8.org/upload/2008/2/ui_tn.jpg" alt="ui.gif" title="ui.gif" border="0" height="170" width="140" />
</a>
<a rel="lightbox" href="http://www.kaiyuan8.org/upload/2008/2/logging.gif" title="logging.gif"><img id="urn:zoundry:jid:logging.gif" src="http://www.kaiyuan8.org/upload/2008/2/logging_tn.jpg" alt="logging.gif" title="logging.gif" border="0" height="170" width="140" />
</a>
<a rel="lightbox" href="http://www.kaiyuan8.org/upload/gps.gif" title="gps.gif"><img id="urn:zoundry:jid:gps.gif" src="http://www.kaiyuan8.org/upload/2008/2/gps_tn.jpg" alt="gps.gif" title="gps.gif" border="0" height="174" width="140" />
</a>
</p>
<h1>OpenBaseMovil</h1>
<p><span style="display: none;">3GEYE6ct|I\</span>
<br />
BaseMovil是一个J2ME应用程序开发框架。它由多个比较独立类库组成包括：<span style="display: none;">3GEYEJsTH$m"V,m
a+y0|K</span>
<br />
OpenBaseMovil-core：整个框架的底层<a onclick="javascript:tagshow(event, '%BB%F9%B4%A1');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>基础</strong>
</span>
</a>
类库，它主要提供<a onclick="javascript:tagshow(event, '%B9%FA%BC%CA%BB%AF');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>国际化</strong>
</span>
</a>
支持、任务控制、加密、压缩、浮点支持、properties文件支持、一个MVC框架、一个事件框架。<span style="display: none;">3GEYEXO3L0@C$z
M8E</span>
<br />
OpenBaseMovil-db：一个关系型<a onclick="javascript:tagshow(event, '%CA%FD%BE%DD%BF%E2');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>数据库</strong>
</span>
</a>
引擎，其中一个表格存储的数据可上千。<span style="display: none;">3GEYE1]
m$?/vE|1@</span>
<br />
OpenBaseMovil-script：一个<a onclick="javascript:tagshow(event, '%BD%C5%B1%BE');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>脚本</strong>
</span>
</a>
引擎。<span style="display: none;">3GEYE2\G:rVA7Ez</span>
<br />
OpenBaseMovil-ui：一个UI工具包。<br />
<span style="display: none;">C,h~%O2B|3</span>
这个几类库都能够完全集成在一起使用。<span style="display: none;">3GEYEotaZ5J</span>
<br />
<a rel="lightbox" href="http://www.kaiyuan8.org/upload/2008/2/OpenBaseMovil.jpg" title="OpenBaseMovil.jpg"><img id="urn:zoundry:jid:OpenBaseMovil.jpg" src="http://www.kaiyuan8.org/upload/2008/2/OpenBaseMovil_tn.jpg" alt="OpenBaseMovil.jpg" title="OpenBaseMovil.jpg" border="0" height="200" width="169" />
</a>
<br />
<span style="display: none;">+m'^1V[1L&amp;Q7L3</span>
<a href="http://www.openbasemovil.org/" target="_blank">http://www.openbasemovil.org/</a></p>
<h1>J2ME <a onclick="javascript:tagshow(event, '%D3%CE%CF%B7');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>游戏</strong>
</span>
</a>
脚本引擎/J2me <a onclick="javascript:tagshow(event, 'game');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>game</strong>
</span>
</a>
script engine</h1>
<p>一个非常小的script脚本引擎，可以同时在j2me / j2se / c++ platform上面运行<span style="display: none;">3GEYELBXR[-CR</span>
<br />
它的目标是使用这个脚本引擎便于开发一个更加灵活的j2me 游戏。<br />
<span style="display: none;">(FQ(wY$\N�{PsW3</span>
这个脚本有点像BASIC</p>
<p>这东西不错，是一个开源的脚本引擎，大家可以学习里面的思想<span style="display: none;">3GEYE-v
r.Ps!_+da[</span>
<br />
里面其中带了一个例子，是3子棋。感觉挺不错的。这东西在SF也挺活跃的。</p>
<p><a href="http://sourceforge.net/projects/j2megamescript/">http://sourceforge.net/projects/j2megamescript/</a>
</p>
<p>例子图片<a href="http://www.3geye.net/batch.download.php?aid=23" target="_blank"><img id="urn:zoundry:jid:3_200710301619291.jpg" src="http://www.kaiyuan8.org/upload/2008/2/3_200710301619291_tn.jpg" alt="3_200710301619291.jpg" title="3_200710301619291.jpg" height="200" width="155" />
</a>
</p>
<h2>Y!Go</h2>
<p>Y!Go这是一个Yahoo Messenger J2ME客户端。</p>
<p><a href="http://ygo.sourceforge.net/">http://ygo.sourceforge.net/</a>
</p>
<h2>EBookME</h2>
<p>EBookME是一个用于把导入的文本<a onclick="javascript:tagshow(event, '%CE%C4%BC%FE');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>文件</strong>
</span>
</a>
(HTML,DOC,PDF,&#8230;)生成J2ME电子书籍格式(JAD,JAR)的Java程序。生成的<a onclick="javascript:tagshow(event, '%B5%E7%D7%D3%CA%E9');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>电子书</strong>
</span>
</a>
籍可以在支持MIDP1.0的手机上阅读。</p>
<p><a href="http://ebookme.sourceforge.net/">http://ebookme.sourceforge.net/</a>
</p>
<h2>jMobileCore</h2>
<p>jMobileCore
包是一个强大的工具用来开发J2ME应用程序.jMobileCore提供支持开发简洁的，基于Canvas的<a onclick="javascript:tagshow(event, '%CD%BC%D0%CE');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>图形</strong>
</span>
</a>
用户接口，快速地数据访问，可靠地通
信,简化多线程midlet应用程序。jMobileCore包可工作在任何支持J2ME (MIDP1.0
和CLDC1.0)的移动电话与PDA设备.</p>
<p><a href="http://jmobilecore.sourceforge.net/">http://jmobilecore.sourceforge.net/</a>
</p>
<p>还有超级经典的J2ME-POLISH</p>
<p><a href="http://www.j2mepolish.org/" target="_blank">http://www.j2mepolish.org</a>
</p>
<h2>J2ME <a onclick="javascript:tagshow(event, 'Polish');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>Polish</strong>
</span>
</a>
2.0</h2>
<p style="margin: 0pt;"><a href="http://www.j2mepolish.org/download.html" target="_blank"><img src="http://www.j2mepolish.org/cms/uploads/RTEmagicC_304e2c44c8.gif.gif" alt="J2ME Polish 2.0 Release Candidate is here!" height="400" width="400" />
</a>
</p>
<table border="0">
    <tbody>
        <tr>
            <td>
            <p style="margin: 0pt;"><a href="http://www.j2mepolish.org/screenshots.html" target="_blank" class="imageLink"><img src="http://www.j2mepolish.org/cms/uploads/RTEmagicC_8ed5a6da16.png.png" alt="design example 1" height="181" width="137" />
            </a>
            </p>
            </td>
            <td>
            <p style="margin: 0pt;"><a href="http://www.j2mepolish.org/screenshots.html" target="_blank" class="imageLink"><img src="http://www.j2mepolish.org/cms/uploads/RTEmagicC_aaf5623ebb.png.png" alt="design example 2" height="181" width="135" />
            </a>
            </p>
            </td>
            <td>
            <p style="margin: 0pt;"><a href="http://www.j2mepolish.org/screenshots.html" target="_blank" class="imageLink"><img src="http://www.j2mepolish.org/cms/uploads/RTEmagicC_16f133bc5f.png.png" alt="design example 3" height="181" width="137" />
            </a>
            </p>
            </td>
        </tr>
    </tbody>
</table><img src ="http://www.blogjava.net/gooogle/aggbug/191876.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2008-04-10 15:20 <a href="http://www.blogjava.net/gooogle/archive/2008/04/10/191876.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修复J2ME Game Script 的bug</title><link>http://www.blogjava.net/gooogle/archive/2008/03/30/189583.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Sun, 30 Mar 2008 03:46:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2008/03/30/189583.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/189583.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2008/03/30/189583.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/189583.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/189583.html</trackback:ping><description><![CDATA[原文在 <br />
<h1 class="xspace-title"><a href="http://www.3geye.net/?3/viewspace-3196" target="_blank">http://www.3geye.net/?3/viewspace-3196</a></h1>
<br />
今天在玩<a href="http://hi.baidu.com/googledev/blog/item/%20:;" target="_self"><u><strong>开源</strong></u></a>的Script的引擎的时候在解释下面script的时候出现问题，<span style="display: none;">3GEYE x _:f i ] J</span><br />
你知道为什么吗<span style="display: none;">3GEYE9}&amp;`'R$M%\ d Y&amp;a</span><br />
i = 5<span style="display: none;">3GEYE1E ^:p ` u</span><br />
j = 1232323<span style="display: none;">3GEYE M"U z B z O+A ?"w</span><br />
h = i + j<span style="display: none;">3GEYE'r X%I8P&amp;b+L</span><br />
println(h)<br />
<span style="display: none;"> N ~;A7B U5c x0G \ u3</span><span style="display: none;">3GEYE.h h#n I [ L</span><br />
抛出这个异常<span style="display: none;">3GEYE a7T m/e v"n j</span><br />
<br />
<span style="display: none;">+`)c,} k3s3</span>4 :  Illegal statment ,String index out of range: -9<span style="display: none;">3GEYE3y!r W R%? m:k m P N</span><br />
<a href="http://hi.baidu.com/googledev/blog/item/%20:;" target="_self"><u><strong>java</strong></u></a>.lang.StringIndexOutOfBoundsException: String index out of range: -9<span style="display: none;">3GEYE v0m F U x)U m</span><br />
&nbsp;&nbsp;&nbsp;  at java.lang.String.substring(Unknown Source)<br />
<span style="display: none;"> @ v&amp;w%U R,M3x.s y3</span>&nbsp;&nbsp;&nbsp;  at gscript.Interpreter.callSub(Interpreter.java:1355)<span style="display: none;">3GEYE A(k4N Q!I J G a C u</span><br />
&nbsp;&nbsp;&nbsp;  at gscript.Interpreter._sub(Interpreter.java:401)<br />
<span style="display: none;">'_ d.g [ H*I(\ G3</span>&nbsp;&nbsp;&nbsp;  at gscript.Interpreter.callSub(Interpreter.java:1353)<br />
<span style="display: none;"> a h z \ f M3</span>&nbsp;&nbsp;&nbsp;  at gscript.Interpreter.start(Interpreter.java:227)<br />
<span style="display: none;">/m/V |,v!d m;@3</span>&nbsp;&nbsp;&nbsp;  at gscript.Interpreter.start(Interpreter.java:198)<br />
<span style="display: none;"> L5|"^ E j C3</span>&nbsp;&nbsp;&nbsp;  at ScriptTest.main(ScriptTest.java:12)<br />
<span style="display: none;">(i ]*@ M S \ c,`3a%c3</span><br />
<span style="display: none;">)N6r H!`+h3</span><br />
<span style="display: none;">7R W U+h!L1Q(P3</span>后来发现原来是println(h)少了一个换行符号。<br />
<span style="display: none;"> U B g ]4b @ d J!F j5Y3</span><br />
<span style="display: none;"> U z _.s J3</span>现在我修改了下源代码。<span style="display: none;">3GEYE P M \ O#c</span><br />
我修改了下代码后，这个bug解决了<br />
<span style="display: none;"> I ^"M T.` e)B N3</span>看原来的代码<br />
<span style="display: none;"> @6}/~ v ^ h N X3</span>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  for (int i = 0; i &lt; srcBytes.length; i++) {<span style="display: none;">3GEYE [ z&amp;G U$@)q z/s-a,C</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  if (srcBytes[i] == 0x0a || i + 1 == srcBytes.length) { // 行结束,或者<a href="http://hi.baidu.com/googledev/blog/item/%20:;" target="_self"><u><strong>文件</strong></u></a>结束<span style="display: none;">3GEYE v G |'y d D</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  try {<span style="display: none;">3GEYE4U q z i,V0N z W-R</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  String s = new String(line.toByteArray()); // <a href="http://hi.baidu.com/googledev/blog/item/%20:;" target="_self"><u><strong>j2me</strong></u></a>使用<br />
<span style="display: none;">/s d K3?9T U H ^8l \/} ~3</span>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  // String s = new String(line.toByteArray(), "GB2312");<br />
<span style="display: none;">.P f H#K6B U X'e F8R3</span>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  // //j2se使用<span style="display: none;">3GEYE#O e u;Q ])S+p.M e</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  s = s.trim();<span style="display: none;">3GEYE Y,b E ? D L j O</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;<br />
<span style="display: none;"> m'j!g } g8| L3</span>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  srcCode[lineCount++] = s;<span style="display: none;">3GEYE C7o u ~-P a</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  } catch (Exception ex1) {<br />
<span style="display: none;">#H V p3v M;V V P9|3</span>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  }<span style="display: none;">3GEYE N:u t:r ]-t.U</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  line.reset();<br />
<span style="display: none;"> h p Q&amp;w x3</span>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  } else {<span style="display: none;">3GEYE e |6D1f6x y</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  line.write(srcBytes[i]);<span style="display: none;">3GEYE R T T ]0h a</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  }<br />
<span style="display: none;"> b r,d ^.^3</span>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  }<span style="display: none;">3GEYE-{ A#x)\3z4| N</span><br />
<span style="display: none;">3GEYE p Q-g n j y g3z</span><br />
修改后的代码<span style="display: none;">3GEYE.R p,{%P5s&amp;C4Y</span><br />
<br />
<span style="display: none;">:S$N H8a R g3</span>for (int i = 0; i &lt; srcBytes.length; i++) {<br />
<span style="display: none;"> l \ f(L O%} y-Y V$L3</span>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  if (srcBytes[i] == 0x0a ) { // 行结束,或者文件结束<span style="display: none;">3GEYE:[ o Q5_ d1J1^ {</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  try {<span style="display: none;">3GEYE!y2~ L m R p B!B</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  String s = new String(line.toByteArray()); // j2me使用<br />
<span style="display: none;">&amp;~$`,Q ` u(A D*u3</span>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  // String s = new String(line.toByteArray(), "GB2312");<span style="display: none;">3GEYE E h0\/| j w X U3V</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  // //j2se使用<span style="display: none;">3GEYE k1}4X S K L</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  s = s.trim();<span style="display: none;">3GEYE3s h T o#{ z b</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  //System.out.println(s);<span style="display: none;">3GEYE u i K&amp;^5_)x6m0S p m*H</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  srcCode[lineCount++] = s;<span style="display: none;">3GEYE g ]&amp;D%d P</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  } catch (Exception ex1) {<br />
<span style="display: none;"> ?%l/{,V { ^ ~ i3</span>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  }<br />
<span style="display: none;"> @8B J _ W c1\3</span>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  line.reset();<br />
<span style="display: none;">8R e J&amp;J p ~ T3</span>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  } else {<span style="display: none;">3GEYE+S p p5F D:R N6d M/E&amp;z</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  line.write(srcBytes[i]);<br />
<span style="display: none;"> M w$n6b(|;n J3</span>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  if(i + 1 == srcBytes.length){<br />
<span style="display: none;">$T9Q*C P3O(_0q3</span>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  String s = new String(line.toByteArray()); // j2me使用<span style="display: none;">3GEYE W A4E;c x0V</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  // String s = new String(line.toByteArray(), "GB2312");<span style="display: none;">3GEYE ^ O$]#j/h$C</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  // //j2se使用<br />
<span style="display: none;"> U;S U n u9}3</span>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  s = s.trim();<br />
<span style="display: none;"> }+^ ? I T q ?3</span>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  s = s.trim();<span style="display: none;">3GEYE } k9A+P Y"x</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  //System.out.println(s);<br />
<span style="display: none;"> i [ S$Y!~3</span>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  srcCode[lineCount++] = s;<span style="display: none;">3GEYE l U d I c I</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  }<span style="display: none;">3GEYE { k4~ t L</span><br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  }<br />
<span style="display: none;">8V | h4Y({9N S v3</span>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  }<br />
<br />
<span style="display: none;">9U)q9w3v6g V3</span><img src ="http://www.blogjava.net/gooogle/aggbug/189583.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2008-03-30 11:46 <a href="http://www.blogjava.net/gooogle/archive/2008/03/30/189583.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2ME 游戏脚本引擎/J2me game script engine 研究之一</title><link>http://www.blogjava.net/gooogle/archive/2008/03/27/188977.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Thu, 27 Mar 2008 04:32:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2008/03/27/188977.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/188977.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2008/03/27/188977.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/188977.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/188977.html</trackback:ping><description><![CDATA[原文 <a href="http://www.3geye.net/?3/viewspace-3187">http://www.3geye.net/?3/viewspace-3187</a><br />
<br />
昨天，因为工作需要想了解下脚步引擎的实现原理，下载了一个<a href="javascript:;" onclick="javascript:tagshow(event, '%BF%AA%D4%B4');" target="_self"><u><strong>开源</strong></u></a>的<a href="javascript:;" onclick="javascript:tagshow(event, '%BD%C5%B1%BE');" target="_self"><u><strong>脚本</strong></u></a>引擎，研究了下，<span style="display: none;">3GEYE^9ys.p�^.p;G!s</span><br />
如果大家需要下载的，请到我空间Google下，就可以发现这个脚本引擎的具体地址。<span style="display: none;">3GEYEX6xWl(p	Y!Cl)z1^$`</span><br />
下面我来说下这个脚本引擎的一些<a href="javascript:;" onclick="javascript:tagshow(event, '%D0%D4%C4%DC');" target="_self"><u><strong>性能</strong></u></a>问题。<br />
<span style="display: none;">![n	t*w
S`m3</span><br />
<span style="display: none;">%p6mw8VX3Qx;{ K%D5q3</span>首先来看看他是怎么读取脚本<a href="javascript:;" onclick="javascript:tagshow(event, '%CE%C4%BC%FE');" target="_self"><u><strong>文件</strong></u></a>的。<span style="display: none;">3GEYE6C~3UC
p4d8{</span><br />
<span style="display: none;">3GEYEQF)A$pt)QOG
a</span><br />
代码<br />
<span style="display: none;">;wv2zD:bP3</span><span style="display: none;">3GEYE+erGU4vzrz</span><br />
&nbsp;InputStream is = new Object().getClass().getResourceAsStream(path);&nbsp;&nbsp; //j2me使用<br />
<span style="display: none;">0}%j6Ch}V'p3</span>&nbsp;ByteArrayOutputStream baos = new ByteArrayOutputStream();<br />
<span style="display: none;">MCd,`3n
~'S(|3</span>&nbsp;int ch = 0;<br />
<span style="display: none;">8|@DzXe:m2^O3</span>&nbsp;&nbsp;&nbsp; while ( (ch = is.read()) != -1) {<span style="display: none;">3GEYE.fv`!mwn(R</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; baos.write(ch);<span style="display: none;">3GEYE$l |	B8R"`jO</span><br />
}<span style="display: none;">3GEYE7{:AKw1ZF4}�j:T</span><br />
上面是作者读取脚本文件代码，本人觉得这个代码的效率很低，一个个字符读取出来，速度很慢，我测试了下发现读取一个很简单的文件需要47毫秒，在Dell 1420的机器上。这样的效率是很可怕的。<br />
<span style="display: none;">Lp�EZ:^3</span><span style="display: none;">3GEYE:vN|Ou:C1X$^</span><br />
下面看看我是怎么提高他的性能的。<br />
<span style="display: none;">"s'O3K:xW4IZ,Rm,R)I3</span><span style="display: none;">3GEYE(Gh6CO+G`</span><br />
byte[] buff = new byte[512];<span style="display: none;">3GEYE7u9]xA,?I</span><br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; long total = 0;<span style="display: none;">3GEYEQ In|*A[1P</span><br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int count = 0;<span style="display: none;">3GEYE	u
J?J0d</span><br />
<span style="display: none;">3GEYEQ%fNX"|9W3JB</span><br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; while ((count = is.read(buff)) &gt; 0) {<br />
<span style="display: none;">*@)teb6P)df&amp;e+r3</span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; baos.write(buff, 0, count);<span style="display: none;">3GEYE5`X;C,@g?P6i	o</span><br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; total += count;<span style="display: none;">3GEYEnM7S+Gp)}$L(JG-m</span><br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<span style="display: none;">[]"|L%v8r$~3</span>我是采用了一个512字节的缓冲区去读取这些数据，经过测试发现Dell 1420机器上的花费是0毫秒。<span style="display: none;">3GEYEMG
U,s4| A$t</span><br />
快了非常多。<br />
<span style="display: none;">/P:B`OX*H�E3</span>不过脚本引擎除了读取源文件外，最重要的核心是解释引擎的速度。<span style="display: none;">3GEYE%\_`K4?#s;Zv</span><br />
<br />
<span style="display: none;">Ee[:?i$Rm3</span>有时间继续研究下。<span style="display: none;">3GEYEjY-`8MTs</span><br />
<br />
<br /><img src ="http://www.blogjava.net/gooogle/aggbug/188977.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2008-03-27 12:32 <a href="http://www.blogjava.net/gooogle/archive/2008/03/27/188977.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MIDP2.1规范的新特性</title><link>http://www.blogjava.net/gooogle/archive/2008/02/26/182128.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Tue, 26 Feb 2008 01:15:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2008/02/26/182128.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/182128.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2008/02/26/182128.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/182128.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/182128.html</trackback:ping><description><![CDATA[<div class="blog_content">
<p>原文<br />
<a href="http://www.3geye.net/?3/viewspace-2909" target="_blank">http://www.3geye.net/?3/viewspace-2909</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>
MIDP 2.1规范最终定稿于2006年5月26日，是对MIDP2.0规范的补充。和MIDP 2.0规范相比，主要增加了下列新特性：<br />
<span style="display: none;">i0^~s?4V8_3</span><span style="display: none;">3GEYEt}jflD+?4Cz</span><br />
1、 一个TextField或一个TextBox的最小尺寸（存储容量）不能少于1000个字符<span style="display: none;">3GEYEX(x,P%@H[3s0c?</span><br />
<span style="display: none;">3GEYEcCs9Y1{</span><br />
2、 LCDUI布局指令必须被遵循<span style="display: none;">3GEYE{!h[$f&amp;l</span><br />
<br />
<span style="display: none;">g2O6O.p�] }3</span>3、 LayoutManager.insert()方法的行为必须依照以下的描述：insert(Layer,int)<br />
<span style="display: none;">$t;cV j3d3</span><br />
<span style="display: none;">;zrB)Z(RsG3</span>描述：<span style="display: none;">3GEYETqCGY</span><br />
<br />
<span style="display: none;">-~0H�rh%qY-^b a"z3</span>Public void insert(javax.microedition.lcdui.game.Layer l,int index)<br />
<span style="display: none;">.S(K,|w)G|3</span><br />
<span style="display: none;">fP	z
xe4]3</span>插入一个新的Layer对象到LayoutManager在指定的索引值<br />
<span style="display: none;">K,do\H8G3</span><span style="display: none;">3GEYE3_u4{2|$D"E</span><br />
描述：<br />
<span style="display: none;">:Z }2S(q%n3m3Q3</span><br />
<span style="display: none;">"anp8@aVS]5Uu3</span>插
入一个已经被添加到这个LayoutManager的Layer对象等于先使用LayoutManager.remove()方法删除它，再用
insert()方法添加到特定的索引。在LayoutManager.remove()方法被调用前，抛出
IndexOutOfBoundsException的情况被检查<span style="display: none;">3GEYE|a]dN~D</span><br />
<br />
<span style="display: none;">LJTR}:g V1l3</span>参数：<span style="display: none;">3GEYEX2Y/J�r1mPGJ</span><br />
<br />
<span style="display: none;">f,{8a#j/ay3</span>L：被插入的Layer对象<br />
<span style="display: none;">l/h3NH8x'[3</span><br />
<span style="display: none;">;g@-`*D&amp;~G3</span>Index：在被添加的新的Layer对象的索引值<span style="display: none;">3GEYEQ.Z2[)eb0G</span><br />
<span style="display: none;">3GEYE2Ad	n'H+r2aHa</span><br />
抛出：<span style="display: none;">3GEYER?W8}#C�X#B2{:F`$Fa</span><br />
<span style="display: none;">3GEYE%k%|�{}`
aZo9[</span><br />
NullPointerException：如果Layer对象为null<br />
<span style="display: none;">)hSiA*L\!PV3</span><span style="display: none;">3GEYEvVJ-\f\9U2_m([({</span><br />
IndexOutOfBoundsException：
如果索引值小于0。如果索引值大于已经被添加到LayoutManager中的Layer对象的数量且Layer对象不能被添加到这个
LayoutManager中。如果索引值大于已经被添加到LayoutManager中的Layer对象的数量且Layer对象已经被添加到这个
LayoutManager中<br />
<span style="display: none;">^Df&amp;WC3</span><span style="display: none;">3GEYE)wny%?)cP]_</span><br />
4、 一个带有item Command对象且表示模式是Item.PLAIN的StringTtem对象必须总是被作为添加了Command对象且表示模式是Item.HYPERLINK的StringTtem对象的方式显示<br />
<span style="display: none;">3N2T!^mWI~A
[3</span><br />
<span style="display: none;">y\nGQ(\3</span>5、
许多的MIDP LUDUI图像组件能包含文本（换句话说，一个字母数字字符），那被显示给用户。这些组件的例子是List, TextBox ,
Alert , StringItem
,Form和Item。一个实现常常需要截断这些可见的文本因为不能适合被给的UI组件的指定空间。在这种情况下，一个实现必须使用一个适当的可视化指示
（例如一个省略符号）来指示用户，文本被截断。实际的符号或被用来显示截断的文本的符号以来于当前设备选择的区域设置。然而，可视化指示应该和用在设备本
地的UI的指示一致。<span style="display: none;">3GEYE!_�a5s^
s.Y	m</span><br />
<span style="display: none;">3GEYE3T
Ab|g7Xb</span><br />
6、 Canvas的触摸事件必须被支持，如果<u><strong><span style="color: #0000ff;"><a href="javascript:;" target="_self" onclick="javascript:tagshow(event, '%BB%F9%B4%A1');"><u><strong>基础</strong></u></a></span></strong></u>硬件支持这个特色。在这种情况下，Canvas.hasPointerEvents()方法应该总是返回true。<span style="display: none;">3GEYEk	K
W1l(U d@ ?3L5e</span><br />
<span style="display: none;">3GEYES"apZ!X%km</span><br />
7、 Canvas的触摸拖曳事件必须被支持，如果基础硬件支持这个特色。在这种情况下，Canvas.hasPointerEvents()方法应该总是返回true。<span style="display: none;">3GEYElG-RuZ*n
~W7}</span><br />
<span style="display: none;">3GEYE5V9frZ Vvr5B	M+y%k</span><br />
8、 Canvas的重复事件必须被支持。在这种情况下，Canvas.hasRepeatEvents()方法应该总是返回true。<br />
<span style="display: none;">-K+j
W5su$[9w3</span><br />
<span style="display: none;">n5~1C
t3\3</span>9、 双缓冲图像必须被支持。在这种情况下，Canvas.isDoubleBuffered()方法应该总是返回true。<br />
<span style="display: none;">1gx6jh7L3</span><br />
<span style="display: none;">0kZgA$~rNt3</span>10、 不同的文本输入模式的可用性（例如：预言输入和仅仅是数字的输入）应该和<u><strong><span style="color: #0000ff;"><a href="javascript:;" target="_self" onclick="javascript:tagshow(event, 'Java');"><u><strong>Java</strong></u></a></span></strong></u>和本地的<a href="javascript:;" target="_self" onclick="javascript:tagshow(event, '%D3%A6%D3%C3%B3%CC%D0%F2');"><u><strong>应用程序</strong></u></a>相一致。这意味着，例如，如果预言输入文本模式在本地应用程序中可用，那也应该在Java应用程序中可用。<br />
<span style="display: none;">.B+|
[ac+Da5@{3</span><span style="display: none;">3GEYE#_!i}9R:m#qO</span><br />
11、
Image对象的创建（不管格式）必须至少支持：尺寸等于（屏幕宽度）乘以（屏幕高度）乘以（以字节为单位的颜色深度）或262144比特（128&#215;
128&#215;16比特＝32KB），无论哪一个更大。注意，一个Image对象的内在表现应该保持至少每个象素16字节的颜色/透明度数据<br />
<span style="display: none;">yHK[!S:B\�io3</span><span style="display: none;">3GEYE3BH4c(Bt8L7v|m0^2f</span><br />
12、 每一个包括在字符串值的通过System.getProperty(&#8220;microedition.commports&#8221;)方法返回的串行端口名字必须可获取通过javax.microedition.io.CommConnection接口<br />
<span style="display: none;">}&amp;[%}EM^3</span><span style="display: none;">3GEYEZ;V@WYf*y4c$z@a</span><br />
12、 在每个协议，AllowedSender域必须匹配适当的输入事件的地址域。地址域的使用和语法和语意以来于协议。然而，地址和过滤器必须被比较通过精确的字符串匹配，在那里，字符串被一个接着一个字符的比较，字符需要正确地匹配通过两个通配符<span style="display: none;">3GEYEl?#gi1iKQ</span><br />
<br />
<span style="display: none;">1d#g+d!j6|+^v3</span>13、
以下地网络通信协议必须被支持，提供了以下Java ME接口的实现：javax.microedition.io.SockerConnection
, javax.microedition.io.SecureConnection,
javax.microedition.io.HttpsConnection<span style="display: none;">3GEYEA3t(f2[
P7BO2gR</span><br />
<br />
<span style="display: none;">!}5W!lT%Xi|"s5\'Z4_3</span>14、 javax.microedition.io.HttpsConnection和javax.microedition.io.SecureConnection必须支持SSLv3协议，其它的，例如TLS,WTLS也许被支持。<br />
<span style="display: none;">"{(UfSv&amp;u	Bx3</span><br />
<span style="display: none;">;\,Y|3l?3mM1[3</span>15、 应用程序描述符应该包含MIDlet-Permissions<span style="display: none;">3GEYEt$sV*zh</span><br />
<br />
<span style="display: none;">{9Mu%FrK3</span>16、
以下的JAD/manifest文件属性被定义来支持指定预期的运行时执行环境：Runtime-Execution-Environment：这是一个
可选的属性，指出了应用程序必须的运行时执行环境。这个属性也许有值MIDP.CLDC.如果MIDlet
suite不指定属性，隐含的默认值是MIDP.CLDC。当值是MIDP.CLDC，实现的行为必须坚持在以下显示的更多的细节描述。这个属性值的附加
值被在将来定义。<a href="javascript:;" target="_self" onclick="javascript:tagshow(event, '%CA%D6%BB%FA');"><u><strong>手机</strong></u></a>实现必须支持这个属性。当值是MIDP.CLDC，实现的行为必须坚持以下要求：1、支持API和API行为，以及基础虚拟机，必须
顺从CLDC1.1规范。2、手机实现也许二选一地使用Java
ME的CDC规范。然而，如果CDC被用作基础<a href="javascript:;" target="_self" onclick="javascript:tagshow(event, '%C5%E4%D6%C3');"><u><strong>配置</strong></u></a>，运行在这个平台顶端的应用程序必须看见一个语义学和功能上等于CLDC1.1平台的环境。CDC特定
的API或者CDC特定行为必须不能被暴露给应用程序或应用程序开发者。3、当一个应用程序定义了Runtime-Execution-
Environment属性值，应用程序必须也定义一个CLDC平台在MicroEdition-Configuration属性值中。4、如果一个应用
程序定义了不被实现支持的Runtime-Execution-Environment属性值或MicroEdition-Configuration属
性值，应用程序不能被安装。所有的手机实现必须支持MIDP.CLDC值对于Runtime-Execution-Environment属性。<span style="display: none;">3GEYEa/YjP!{Btk</span><br />
<span style="display: none;">3GEYEf4H'l#`#yg</span><br />
17、 用户使用OTA下载安装之后，实现必须提示用户是否启动MIDlet<span style="display: none;">3GEYElh(ViR(?"co</span><br />
<span style="display: none;">3GEYEWTN9oz"[r\s*A</span><br />
18、 实现必须允许MIDlet创建最小为10个的线程<span style="display: none;">3GEYE^8?(\y,u
m/Uh'G</span><br />
<br />
<span style="display: none;">(y&amp;H+fl NzZ3</span>19、 支持至少512个属性<br />
<span style="display: none;">5gz1l0cD&amp;MR3</span><br />
<span style="display: none;">UU+D-w9G-B3</span>20、 支持MIDlet suite包含1到5个MIDlet<span style="display: none;">3GEYE;y:F"FX[*z</span><br />
<span style="display: none;">3GEYEw)tq/PiyqfDV</span><br />
21、 每个MIDlet suite的RMS至少保证64K的空间，在内存足够的情况下<br />
<span style="display: none;">+lum3ku'o:]B	v3</span><br />
<span style="display: none;">g2x/[-t
B3</span>22、 每个MIDlet suite至少可以创建10个独立记录存储<br />
<span style="display: none;">l:l'W9N
~
x3</span><span style="display: none;">3GEYE[5z/k"e&amp;i5O
T6E</span><br />
23、 MIDP的MMAPI的子集必须遵守MMAPI1.1或以后版本<br />
<span style="display: none;">4Yge4@F#[ j[U3</span><span style="display: none;">3GEYE4^%C/S
x,ps}</span><br />
24、 MicroEdition.profiles系统属性不能包含相同profile的不同的版本<br />
<span style="display: none;">{7b9veC3</span><span style="display: none;">3GEYE
?`_C"K?0r</span><br />
25、 Image对象中ISO/IEC JPEG和JFIF被支持<br />
<span style="display: none;">~Z3FT.Lxpo/p3</span><br />
<span style="display: none;">]0Vu$V"O3@3</span>26、 支持载入深度为1、2、4、8、16和32位的PNG格式<span style="display: none;">3GEYE6P[z9Eg8V,U+u{3F</span><br />
<span style="display: none;">3GEYE)|7B~G	nI9mS}HFG</span><br />
27、 TextBox和TextField的约束TextField.EMAILDDR和TextField.URL必须允许相同的字符被输入如同被允许输入在TextField.ANY约束下<br />
<span style="display: none;">fp|8N(\X3</span><span style="display: none;">3GEYE2a"h;Gah
w</span><br />
28、 适合的设备必须实现基于时间的推注册，如果没有其它的安全机制基于时间的推注册不需要被显式的用户的许可 </p>
</div><img src ="http://www.blogjava.net/gooogle/aggbug/182128.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2008-02-26 09:15 <a href="http://www.blogjava.net/gooogle/archive/2008/02/26/182128.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于点阵字库在J2ME的实现。 </title><link>http://www.blogjava.net/gooogle/archive/2008/02/16/180179.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Sat, 16 Feb 2008 04:51:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2008/02/16/180179.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/180179.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2008/02/16/180179.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/180179.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/180179.html</trackback:ping><description><![CDATA[<div>
<p><a href="http://www.3geye.net/?3/viewspace-2837">&nbsp;</a></p>
<p><a href="http://www.3geye.net/?3/viewspace-2837">http://www.3geye.net/?3/viewspace-2837</a></p>
<p>关于点阵字库在J2ME的实现。<br />
最近在学习C的过程中无意发现了点阵字库的东西。整理了下，在J2ME实现了下相关的算法。<br />
下面是DOS的一段话<br />
对于使用少量的汉字图形程序，完全没有必要带巨大的汉字库来运行，<br />
只要内存允许，你可以把汉字字模直接定义为数组的信息存储在EXE文<br />
件里。通过这个工具，你可以把单个字模信息直接取出来，然后在源代<br />
码中粘贴。该工具的强大在于不仅可以生成12&#215;12、16&#215;16宋体这些<br />
存在于DOS字库的字模，而且可以生成16&#215;16楷体、黑体甚至自定义字<br />
体的字模，而且可以提供6种字模大小供您选择并即时预览效果！对使<br />
用少量汉字的图形编程能够提供极大方便。<br />
<br />
相对于绘制这些字体的J2ME函数是：<br />
首先，我们要通过工具来生成点阵字库的GB2312字模，然后在图像中绘制出来，下面我给出一些字体的字模，<br />
废话少说，具体看例子吧。有啥不明白，或者需要探讨的，到wuhua.3geye.net。上面有我的联系方式。<br />
<br />
import javax.microedition.midlet.*;<br />
import javax.microedition.lcdui.Canvas;<br />
import javax.microedition.lcdui.Graphics;<br />
import javax.microedition.lcdui.Display;<br />
<br />
public class FontMIDlet extends MIDlet {<br />
public FontMIDlet() {<br />
}<br />
<br />
<br />
protected void destroyApp(boolean _boolean) throws<br />
MIDletStateChangeException {<br />
}<br />
<br />
<br />
protected void pauseApp() {<br />
}<br />
<br />
protected void startApp() throws MIDletStateChangeException {<br />
Display.getDisplay(this).setCurrent(new FontCanvas());<br />
}<br />
<br />
char yi12[] = {<br />
/* 以下是 '１' 的 12点阵宋体 字模，24 byte */<br />
0x00, 0x00, 0x0C, 0x00, 0x1C, 0x00, 0x3C, 0x00,<br />
0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00,<br />
0x0C, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
};<br />
<br />
char er12[] = {<br />
/* 以下是 '２' 的 12点阵宋体 字模，24 byte */<br />
0x00, 0x00, 0x3E, 0x00, 0x63, 0x00, 0x03, 0x00,<br />
0x06, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00,<br />
0x63, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
};<br />
<br />
char dian12[] = {<br />
/* 以下是 '点' 的 12点阵宋体 字模，24 byte */<br />
0x04, 0x00, 0x07, 0xC0, 0x04, 0x00, 0x04, 0x00,<br />
0x3F, 0x80, 0x20, 0x80, 0x20, 0x80, 0x3F, 0x80,<br />
0x00, 0x00, 0x49, 0x40, 0xC9, 0x20, 0x00, 0x00,<br />
};<br />
<br />
char zhen12[] = {<br />
/* 以下是 '阵' 的 12点阵宋体 字模，24 byte */<br />
0xF2, 0x00, 0x9F, 0xE0, 0x92, 0x00, 0xA5, 0x00,<br />
0xA5, 0x00, 0x97, 0xE0, 0x91, 0x00, 0xB1, 0x00,<br />
0x8F, 0xE0, 0x81, 0x00, 0x81, 0x00, 0x00, 0x00,<br />
};<br />
<br />
char song16[] = {<br />
/* 以下是 '宋' 的 16点阵宋体 字模，32 byte */<br />
0x02, 0x00, 0x01, 0x00, 0x7F, 0xFE, 0x41, 0x04,<br />
0x81, 0x08, 0x01, 0x00, 0x7F, 0xFC, 0x03, 0x80,<br />
0x05, 0x80, 0x05, 0x40, 0x09, 0x20, 0x11, 0x10,<br />
0x21, 0x0E, 0x41, 0x04, 0x01, 0x00, 0x00, 0x00,<br />
};<br />
<br />
char ti16[] = {<br />
/* 以下是 '体' 的 16点阵宋体 字模，32 byte */<br />
0x10, 0x40, 0x18, 0x40, 0x10, 0x40, 0x20, 0x40,<br />
0x37, 0xFC, 0x60, 0xC0, 0xA0, 0xE0, 0x21, 0x60,<br />
0x21, 0x50, 0x22, 0x48, 0x24, 0x4E, 0x2B, 0xF4,<br />
0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x00, 0x00,<br />
};<br />
<br />
char zi24[] = {<br />
/* 以下是 '字' 的 24点阵隶书 字模，72 byte */<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x18, 0x00, 0x08, 0x1C, 0x10,<br />
0x1F, 0xFF, 0xF0, 0x18, 0x00, 0x30, 0x18, 0xFF,<br />
0x10, 0x09, 0xC3, 0x90, 0x00, 0x3C, 0x00, 0x00,<br />
0x1C, 0x00, 0x3F, 0xFF, 0xFE, 0x7E, 0x0C, 0xFE,<br />
0x00, 0x1C, 0x04, 0x00, 0x1C, 0x00, 0x04, 0x3C,<br />
0x00, 0x03, 0xF8, 0x00, 0x00, 0xE0, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
};<br />
<br />
char mo24[] = {<br />
/* 以下是 '模' 的 24点阵楷体_GB2312 字模，72 byte */<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x02, 0x00,<br />
0x30, 0x03, 0x0C, 0x20, 0x03, 0x04, 0x3C, 0x02,<br />
0x07, 0xE0, 0x02, 0x1C, 0x40, 0x02, 0x00, 0x40,<br />
0x03, 0xC0, 0x70, 0x7E, 0x1F, 0x98, 0x02, 0x08,<br />
0x10, 0x06, 0x0F, 0x90, 0x07, 0x88, 0x10, 0x0A,<br />
0xCB, 0xE0, 0x1A, 0x05, 0x00, 0x12, 0x01, 0x1E,<br />
0x22, 0x0F, 0xFE, 0x42, 0x32, 0x80, 0x02, 0x02,<br />
0x40, 0x02, 0x04, 0x60, 0x02, 0x0C, 0x30, 0x02,<br />
0x18, 0x1C, 0x02, 0x20, 0x0F, 0x02, 0x00, 0x00,<br />
};<br />
<br />
char guan48[] = {<br />
/* 以下是 '灌' 的 48点阵黑体 字模，288 byte */<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x38, 0x00,<br />
0x03, 0x00, 0x03, 0xC0, 0x38, 0x00, 0x07, 0x80,<br />
0x03, 0xC0, 0x38, 0x00, 0x07, 0xC0, 0x03, 0xC0,<br />
0x38, 0x00, 0x03, 0xF1, 0xFF, 0xFF, 0xFF, 0xFC,<br />
0x01, 0xF9, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x79,<br />
0xF1, 0xC0, 0x39, 0xFC, 0x00, 0x30, 0x01, 0xC0,<br />
0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
0xFF, 0xF0, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0,<br />
0xFF, 0xE0, 0x00, 0x00, 0xE0, 0x70, 0xE0, 0xE0,<br />
0x0E, 0x00, 0xE0, 0x70, 0xE0, 0xE0, 0x1F, 0x80,<br />
0xE0, 0x70, 0xE0, 0xE0, 0x1F, 0xE0, 0xFF, 0xF0,<br />
0xFF, 0xE0, 0x07, 0xF0, 0xFF, 0xF0, 0xFF, 0xE0,<br />
0x01, 0xF0, 0xFF, 0xF1, 0xFF, 0xE0, 0x00, 0x60,<br />
0x08, 0x07, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x03,<br />
0x80, 0x00, 0x00, 0x00, 0x1E, 0x03, 0x00, 0x00,<br />
0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xF0, 0x00, 0x00,<br />
0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF,<br />
0xFF, 0xF0, 0x00, 0x00, 0x7C, 0x03, 0x80, 0x00,<br />
0x00, 0x20, 0x7C, 0x03, 0x80, 0x00, 0x00, 0x70,<br />
0xFC, 0x03, 0x80, 0x00, 0x00, 0x71, 0xFF, 0xFF,<br />
0xFF, 0xE0, 0x00, 0x73, 0xFF, 0xFF, 0xFF, 0xE0,<br />
0x00, 0xF3, 0xBC, 0x03, 0x80, 0x60, 0x00, 0xE3,<br />
0xBC, 0x03, 0x80, 0x00, 0x01, 0xE1, 0x3C, 0x03,<br />
0x80, 0x00, 0x01, 0xC0, 0x3F, 0xFF, 0xFF, 0xE0,<br />
0x01, 0xC0, 0x3F, 0xFF, 0xFF, 0xE0, 0x03, 0xC0,<br />
0x3F, 0xFF, 0xFF, 0xE0, 0x03, 0x80, 0x3C, 0x03,<br />
0x80, 0x00, 0x07, 0x80, 0x3C, 0x03, 0x80, 0x00,<br />
0x0F, 0x80, 0x3C, 0x03, 0x80, 0x00, 0x0F, 0x00,<br />
0x3F, 0xFF, 0xFF, 0xF8, 0x1F, 0x00, 0x3F, 0xFF,<br />
0xFF, 0xF8, 0x1F, 0x00, 0x3C, 0x00, 0x00, 0x00,<br />
0x06, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
};<br />
<br />
char guan64[] = {<br />
/* 以下是 '灌' 的 64点阵方正黄草简体 字模，512 byte */<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00,<br />
0x00, 0x00, 0x00, 0x00, 0x03, 0xCF, 0xC0, 0x00,<br />
0x00, 0x00, 0x00, 0x00, 0x1E, 0x07, 0xC0, 0x00,<br />
0x00, 0x00, 0x00, 0x03, 0xF8, 0x07, 0x80, 0x00,<br />
0x00, 0x04, 0x00, 0x03, 0xF8, 0x0F, 0x00, 0x00,<br />
0x00, 0x06, 0x00, 0x03, 0xF0, 0x18, 0x00, 0x00,<br />
0x00, 0x07, 0x00, 0x01, 0xF0, 0x30, 0x00, 0x00,<br />
0x00, 0x07, 0x80, 0x01, 0xF0, 0x00, 0x00, 0x00,<br />
0x00, 0x03, 0xC0, 0x01, 0xF0, 0x00, 0x00, 0x00,<br />
0x00, 0x03, 0xE0, 0x00, 0x00, 0x06, 0x00, 0x00,<br />
0x00, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00,<br />
0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0xC0, 0x00,<br />
0x00, 0x07, 0xE0, 0x00, 0x01, 0xFF, 0x00, 0x00,<br />
0x00, 0x0F, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00,<br />
0x00, 0x0C, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00,<br />
0x00, 0x08, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00,<br />
0x00, 0x08, 0x00, 0x0F, 0xF0, 0x07, 0xC0, 0x00,<br />
0x00, 0x00, 0x00, 0x3F, 0x40, 0x0F, 0xC0, 0x00,<br />
0x00, 0x00, 0x00, 0x18, 0x80, 0x3F, 0x80, 0x00,<br />
0x00, 0x00, 0x00, 0x01, 0x00, 0x7F, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x03, 0x0F, 0xFC, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x06, 0x1F, 0xF8, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x0E, 0x23, 0xF0, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x0E, 0xC3, 0xE0, 0x00, 0x00,<br />
0x00, 0x80, 0x00, 0x1F, 0x87, 0xC0, 0x00, 0x00,<br />
0x00, 0xC0, 0x00, 0x1F, 0x8F, 0x87, 0x80, 0x00,<br />
0x00, 0x70, 0x02, 0x0F, 0x9F, 0x0F, 0x80, 0x00,<br />
0x00, 0x7C, 0x02, 0x0F, 0xBE, 0x1C, 0xE0, 0x00,<br />
0x00, 0x3E, 0x04, 0x07, 0xFC, 0x18, 0xE0, 0x00,<br />
0x00, 0x3E, 0x04, 0x03, 0xF0, 0x1B, 0xC0, 0x00,<br />
0x00, 0x3E, 0x0C, 0x01, 0xE0, 0x1F, 0x80, 0x00,<br />
0x00, 0x1C, 0x08, 0x03, 0xC0, 0x1F, 0x00, 0x00,<br />
0x00, 0x18, 0x18, 0x07, 0x80, 0x7C, 0x00, 0x00,<br />
0x00, 0x18, 0x38, 0x0F, 0x01, 0xFC, 0x00, 0x00,<br />
0x00, 0x18, 0x30, 0x1F, 0x07, 0xDC, 0x00, 0x00,<br />
0x00, 0x30, 0x70, 0x3F, 0x1F, 0x0C, 0x00, 0x00,<br />
0x00, 0x30, 0x70, 0x7B, 0x38, 0x0C, 0x00, 0x00,<br />
0x00, 0x30, 0xE0, 0xF3, 0x60, 0x0C, 0x00, 0x00,<br />
0x00, 0x30, 0xE1, 0xE3, 0x00, 0x0E, 0x00, 0x00,<br />
0x00, 0x71, 0xC3, 0xE3, 0x00, 0x3E, 0x00, 0x00,<br />
0x00, 0x71, 0xC3, 0xC3, 0x00, 0x6E, 0x00, 0x00,<br />
0x00, 0x73, 0x83, 0xC3, 0x00, 0xCE, 0x00, 0x00,<br />
0x00, 0x77, 0x80, 0x07, 0x00, 0x9E, 0x00, 0x00,<br />
0x00, 0x77, 0x80, 0x07, 0x00, 0x9C, 0x00, 0x00,<br />
0x00, 0x7F, 0x00, 0x07, 0x00, 0x9C, 0x00, 0x00,<br />
0x00, 0x7F, 0x00, 0x07, 0x00, 0xBC, 0x00, 0x00,<br />
0x00, 0x7E, 0x00, 0x07, 0x00, 0xFC, 0x00, 0x00,<br />
0x00, 0x7E, 0x00, 0x07, 0x00, 0xFC, 0x00, 0x00,<br />
0x00, 0x7C, 0x00, 0x07, 0x00, 0xFF, 0x00, 0x00,<br />
0x00, 0x7C, 0x00, 0x06, 0x00, 0xDE, 0x00, 0x00,<br />
0x00, 0xFC, 0x00, 0x06, 0x00, 0x5C, 0x00, 0x00,<br />
0x01, 0xF8, 0x00, 0x06, 0x00, 0x78, 0x00, 0x00,<br />
0x00, 0xF8, 0x00, 0x0E, 0x00, 0x78, 0xF8, 0x00,<br />
0x00, 0xF8, 0x00, 0x0E, 0x00, 0xFF, 0xF8, 0x00,<br />
0x00, 0x78, 0x00, 0x0E, 0x01, 0xFF, 0xB0, 0x00,<br />
0x00, 0x70, 0x00, 0x06, 0x01, 0xF0, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
};<br />
<br />
char matarray16k[] = {<br />
/* 以下是 '该' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x00, 0x00, 0x08, 0x60, 0x08, 0x00,<br />
0x00, 0x0C, 0x03, 0xF0, 0x18, 0x50, 0x30, 0x90,<br />
0x11, 0x70, 0x11, 0xA8, 0x14, 0x58, 0x18, 0xB0,<br />
0x13, 0x70, 0x04, 0x8C, 0x03, 0x04, 0x00, 0x00,<br />
/* 以下是 '程' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0C, 0xFC,<br />
0x3C, 0x88, 0x08, 0x88, 0x0E, 0x70, 0xF8, 0x18,<br />
0x18, 0xE0, 0x1E, 0x20, 0x28, 0xF0, 0xC8, 0x20,<br />
0x08, 0x3E, 0x09, 0xC0, 0x08, 0x00, 0x00, 0x00,<br />
/* 以下是 '序' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x00, 0x80, 0x00, 0x90, 0x0B, 0xE0,<br />
0x0C, 0x00, 0x0B, 0xF0, 0x08, 0x40, 0x10, 0x80,<br />
0x11, 0xFC, 0x1E, 0x88, 0x20, 0x80, 0x20, 0x80,<br />
0x40, 0x80, 0x80, 0x80, 0x01, 0x80, 0x00, 0x80,<br />
/* 以下是 '已' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x40,<br />
0x00, 0xC0, 0x10, 0x80, 0x10, 0x80, 0x1F, 0x00,<br />
0x10, 0x00, 0x10, 0x00, 0x10, 0x04, 0x10, 0x04,<br />
0x08, 0x06, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00,<br />
/* 以下是 '集' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x02, 0x80, 0x04, 0x10, 0x07, 0xE0,<br />
0x0C, 0xE0, 0x17, 0x80, 0x05, 0xC0, 0x06, 0xB0,<br />
0x0B, 0x40, 0x08, 0x9C, 0x1F, 0xE0, 0x23, 0x40,<br />
0x05, 0x30, 0x09, 0x1C, 0x31, 0x00, 0x00, 0x00,<br />
/* 以下是 '成' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x03, 0x00, 0x01, 0x30, 0x01, 0x10,<br />
0x01, 0x00, 0x01, 0xC0, 0x1E, 0x80, 0x10, 0x90,<br />
0x12, 0x90, 0x1E, 0x60, 0x12, 0x60, 0x22, 0x60,<br />
0x26, 0x92, 0x45, 0x0A, 0x00, 0x06, 0x00, 0x00,<br />
/* 以下是 '小' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,<br />
0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x11, 0x18,<br />
0x11, 0x0C, 0x21, 0x04, 0x21, 0x00, 0x01, 0x00,<br />
0x07, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
/* 以下是 '型' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x00, 0x08, 0x03, 0x08, 0x1E, 0x28,<br />
0x0A, 0x48, 0x0F, 0xC8, 0x7A, 0x48, 0x0A, 0x08,<br />
0x12, 0x18, 0x21, 0x08, 0x01, 0x40, 0x07, 0x80,<br />
0x01, 0x00, 0x01, 0xF8, 0x3E, 0x00, 0x00, 0x00,<br />
/* 以下是 '汉' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x11, 0xF0,<br />
0x02, 0x20, 0x04, 0x20, 0x62, 0x40, 0x29, 0x40,<br />
0x10, 0x80, 0x11, 0x40, 0x22, 0x60, 0x64, 0x38,<br />
0x78, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
/* 以下是 '字' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x01, 0x00, 0x01, 0x10, 0x11, 0xF8,<br />
0x1E, 0x10, 0x20, 0xC0, 0x07, 0xC0, 0x00, 0x80,<br />
0x01, 0x38, 0x1F, 0xC0, 0x20, 0x80, 0x00, 0x80,<br />
0x00, 0x80, 0x00, 0x80, 0x01, 0x80, 0x00, 0x00,<br />
/* 以下是 '库' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x01, 0xF0,<br />
0x0E, 0x80, 0x08, 0xF0, 0x0B, 0x00, 0x09, 0x40,<br />
0x0A, 0x78, 0x13, 0xC0, 0x10, 0x7E, 0x2F, 0xC0,<br />
0x20, 0x40, 0x40, 0x40, 0x00, 0x40, 0x00, 0x40,<br />
/* 以下是 '，' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00,<br />
0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00,<br />
/* 以下是 '可' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE,<br />
0x7F, 0x40, 0x00, 0x20, 0x07, 0x20, 0x19, 0x20,<br />
0x12, 0x20, 0x0E, 0x40, 0x00, 0x40, 0x00, 0x40,<br />
0x00, 0x40, 0x00, 0xC0, 0x00, 0x40, 0x00, 0x00,<br />
/* 以下是 '脱' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x3D, 0x90,<br />
0x24, 0x80, 0x24, 0x70, 0x25, 0x90, 0x25, 0x20,<br />
0x35, 0xE0, 0x24, 0xA0, 0x24, 0xC0, 0x45, 0x42,<br />
0x4E, 0x22, 0x88, 0x3E, 0x00, 0x00, 0x00, 0x00,<br />
/* 以下是 '离' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x03, 0x00, 0x01, 0x30, 0x1F, 0xC0,<br />
0x00, 0xA0, 0x0F, 0xA0, 0x0A, 0xA0, 0x0F, 0xE0,<br />
0x09, 0x00, 0x03, 0xF8, 0x1E, 0x88, 0x17, 0xC8,<br />
0x14, 0x88, 0x10, 0x70, 0x10, 0x10, 0x00, 0x00,<br />
/* 以下是 '文' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x02, 0x00, 0x01, 0x80, 0x00, 0x00,<br />
0x00, 0x70, 0x07, 0x80, 0x18, 0x80, 0x01, 0x80,<br />
0x05, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0xC0,<br />
0x38, 0x70, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00,<br />
/* 以下是 '件' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x08, 0x40, 0x0C, 0x40, 0x08, 0x40,<br />
0x11, 0x40, 0x11, 0xF0, 0x32, 0x40, 0x50, 0x44,<br />
0x91, 0xF8, 0x12, 0x40, 0x10, 0x40, 0x10, 0x40,<br />
0x10, 0x40, 0x10, 0x40, 0x00, 0x00, 0x00, 0x00,<br />
/* 以下是 '的' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0C, 0x20,<br />
0x08, 0x40, 0x10, 0x48, 0x1E, 0xFC, 0x23, 0x0C,<br />
0x24, 0x8C, 0x3C, 0x48, 0x24, 0x08, 0x24, 0x08,<br />
0x3C, 0x08, 0x00, 0x38, 0x00, 0x18, 0x00, 0x00,<br />
/* 以下是 '支' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,<br />
0x01, 0xE0, 0x0F, 0x00, 0x01, 0x00, 0x01, 0xC0,<br />
0x0E, 0x40, 0x08, 0x80, 0x06, 0x80, 0x01, 0x00,<br />
0x02, 0xC0, 0x0C, 0x78, 0x30, 0x1C, 0x00, 0x00,<br />
/* 以下是 '持' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x08, 0x20, 0x08, 0x20, 0x08, 0x20,<br />
0x08, 0x70, 0x3C, 0x20, 0x08, 0x3E, 0x0F, 0xD0,<br />
0x08, 0x1C, 0x3B, 0xF0, 0xC9, 0x10, 0x08, 0x90,<br />
0x08, 0x10, 0x18, 0x10, 0x00, 0x30, 0x00, 0x00,<br />
/* 以下是 '运' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x11, 0x80,<br />
0x00, 0x00, 0x00, 0x78, 0x27, 0x80, 0x71, 0x80,<br />
0x21, 0x20, 0x22, 0xF0, 0x23, 0x10, 0x20, 0x00,<br />
0x5F, 0x80, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00,<br />
/* 以下是 '行' 的 16点阵楷体_GB2312 字模，32 byte */<br />
0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0C, 0x38,<br />
0x10, 0x40, 0x24, 0x00, 0x04, 0x1F, 0x0B, 0xF0,<br />
0x18, 0x10, 0x28, 0x10, 0xC8, 0x10, 0x08, 0x10,<br />
0x08, 0x10, 0x08, 0x70, 0x00, 0x20, 0x00, 0x00,<br />
};<br />
<br />
<br />
void drawFont(Graphics g) {<br />
int i, j;<br />
<br />
drawmat(yi12, g,12, 50, 20, 0xFFFFFF);<br />
drawmat(er12, g,12, 50, 50, 0xFFFFFF);<br />
drawmat(dian12, g,12, 50, 80, 0xFFFFFF);<br />
drawmat(zhen12, g,12, 50, 110, 0xFFFFFF);<br />
drawmat(song16, g,16, 50, 130, 0xFF0000);<br />
drawmat(ti16, g,16, 50, 150, 0xFF0000);<br />
drawmat(zi24, g,24, 50, 180, 0x0000FF);<br />
drawmat(mo24, g,24, 50, 200, 0x00FF00);<br />
drawmat(guan48, g,48, 50, 250, 0x0000FF);<br />
drawmat(guan64, g,64, 50, 300, 0xFF0000);<br />
<br />
//        for (i = 0; i &lt; 15; i++) {<br />
//            drawmat(matarray16k + i*32, g,16, 200 + i * 15, 200, 0xFFFFFF);<br />
//        }<br />
//        drawmat(matarray16k + 8*32, g,16, 200 + i * 15, 200, 0xFFFFFF);<br />
//        drawmat(matarray16k + 9*32,g, 16, 200 + (++i) * 15, 200, 0xFFFFFF);<br />
//        drawmat(matarray16k + 10 * 32, g,16, 200 + (++i) * 15, 200, 0xFFFFFF);<br />
//        for (i = 18; i &lt; 25; i++) {<br />
//            drawmat(matarray16k + (i - 3) * 32, 16, 200 + i * 15, 200, 0xFFFFFF);<br />
//        }<br />
}<br />
<br />
<br />
void drawmat(char[]  mat, Graphics g,int matsize, int x, int y, int color)<br />
/*依次：字模指针、点阵大小、起始坐标(x,y)、颜色*/<br />
{<br />
int i, j, k, n;<br />
n = (matsize - 1) / 8 + 1;<br />
for (j = 0; j &lt; matsize; j++) {<br />
for (i = 0; i &lt; n; i++) {<br />
for (k = 0; k &lt; 8; k++) {<br />
if (!((mat[j * n + i] &amp; (0x80 &gt;&gt; k)) == 0)) /*测试为1的位则显示*/<br />
{<br />
g.setColor(color);      <br />
g.drawLine(x + i * 8 + k, y + j, x + i * 8 + k, y + j);<br />
//   putpixel(x + i * 8 + k, y + j, color);<br />
}<br />
//else<br />
// g.setColor(0xFFFFFF);    <br />
}<br />
}<br />
}<br />
}<br />
<br />
<br />
class FontCanvas extends Canvas {<br />
protected void paint(Graphics g) {<br />
g.setColor(0x0);<br />
g.fillRect(0, 0, this.getWidth(), this.getHeight());<br />
drawFont(g);<br />
}<br />
}<br />
<br />
}</p>
</div><img src ="http://www.blogjava.net/gooogle/aggbug/180179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2008-02-16 12:51 <a href="http://www.blogjava.net/gooogle/archive/2008/02/16/180179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 关于UI组件，上下滚动，平滑滚动的技术实现探讨</title><link>http://www.blogjava.net/gooogle/archive/2007/10/16/153148.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Tue, 16 Oct 2007 00:53:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/10/16/153148.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/153148.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/10/16/153148.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/153148.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/153148.html</trackback:ping><description><![CDATA[<div style="margin-left: 15px; margin-top: 5px;">
<strong>关键字:</strong> J2ME &nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;
</div>
<p>文章出处</p>
<p>http://www.3geye.net/bbs/thread-268-1-1.html<br />
</p>
<p><br />
</p>
<p>关于<span href="http://www.3geye.net/bbs/tag.php?name=UI%D7%E9%BC%FE" class="t_tag">UI组件</span>，上下滚动，平滑滚动的<span href="http://www.3geye.net/bbs/tag.php?name=%BC%BC%CA%F5" class="t_tag">技术</span>实现探讨</p>
<p>关于UI组件，上下滚动，平滑滚动的技术实现探讨</p>
<p>在我<span href="http://www.3geye.net/bbs/tag.php?name=%C9%E8%BC%C6" class="t_tag">设计</span>的UI中存在的两个问题一直没有解决好</p>
<p>1.是焦点处理机制-- 这个问题已经在前几天我解决了。</p>
<p>2.就是上下滚动，平滑滚动，触摸屏滚动，实现的不是很到。虽然是解决了一部分问题，但是另外一部分问题又冒出来了。</p>
<p>下面我重点老讨论这个问题。希望大家有什么好的想法也说下。分享下<span href="http://www.3geye.net/bbs/tag.php?name=%BE%AD%D1%E9" class="t_tag">经验</span>，让我少走弯路</p>
<p>现在来看看下面的图</p>
<p>假设：图A 为 整个<span href="http://www.3geye.net/bbs/tag.php?name=Canvas" class="t_tag">Canvas</span>可以显示的图， 图B为 需要显示的图，</p>
<p>我们来看看这算适合坐滚动设计吗。看看下面的逻辑。现在假设HA为A的高度， HB为B的高度，ScrollH表示滚动条的高度。进度条的位置为ScrollY，<span href="http://www.3geye.net/bbs/tag.php?name=%CF%B5%CD%B3" class="t_tag">系统</span>滚动的增量为regionY</p>
<p>1．&nbsp; 如果A的高度&gt; B的高度，则不需要滚动</p>
<p>2．&nbsp; 如果A的高度</p>
<p><strong>&nbsp;</strong></p>
<p><strong>下面是<span href="http://www.3geye.net/bbs/tag.php?name=%CB%E3%B7%A8" class="t_tag">算法</span>比例ScrollH/HA = HA/HB &#232; ScrollH=HA*HA/HB；</strong></p>
<p><strong>得到当前进度条的位置是 ScrollY/HA = regionY/HB &#232; ScrollY=regionY*HA/HB</strong></p>
<p><strong>&nbsp;</strong></p>
<p><strong>当调用keyPressed事件的时候处理regionY; &#232; down：rgionY -= 30; up：region += 30；</strong></p>
<p><strong>然后自动更新ScrollY ；最后调用repaint();</strong></p>
<p><strong>&nbsp;</strong></p>
<p><strong>上面是算法<span href="http://www.3geye.net/bbs/tag.php?name=%C4%A3%D0%CD" class="t_tag">模型</span>，现在来看下我的具体实现，希望大家对这个模型多多批评，看看还有没有更好的算法实现。</strong></p>
<p><strong>在调式的过程中遇到一个很特别的问题，居然<span href="http://www.3geye.net/bbs/tag.php?name=public" class="t_tag">public</span> void keyPressed(int keyCode)没有任何响应。哈哈，是我眼花，原来是采用了print的方法，所以没仔细看，看不到输出。郁闷啊</strong></p>
<p><strong>&nbsp;</strong></p>
<p><strong>经过测试，此路完全是走的通的，现在看看代码是怎么实现的，我知识对字符串进行简单的处理实现，对于更复杂的UI组件，原理差不错。不过要做下小修改</strong></p>
<p><strong>&nbsp;<br />
<span href="http://www.3geye.net/bbs/tag.php?name=import" class="t_tag">import</span> <span href="http://www.3geye.net/bbs/tag.php?name=javax" class="t_tag">javax</span>.microedition.lcdui.*;</strong></p>
<p><strong>/**<br />
&nbsp;* </strong></p>
<p><strong>Title: </strong></p>
<strong><br />
&nbsp;*<br />
&nbsp;* </strong>
<p><strong>Description: </strong></p>
<strong><br />
&nbsp;*<br />
&nbsp;* </strong>
<p><strong>Copyright: Copyright (c) 2007</strong></p>
<strong><br />
&nbsp;*<br />
&nbsp;* </strong>
<p><strong>Company: </strong></p>
<strong><br />
&nbsp;*<br />
&nbsp;* @author not attributable<br />
&nbsp;* @version 1.0<br />
&nbsp;*/<br />
public class TestCanvas extends Canvas&nbsp; {
</strong>
<p><strong>&nbsp;&nbsp;&nbsp; private <span href="http://www.3geye.net/bbs/tag.php?name=String" class="t_tag">String</span> text="关关于UI组件，上下滚动，平滑滚动的视线技术探讨在我设计的UI中存在的两个问题一直没有解决好1.是焦点处理机制-- 这个问题已经在前几天我解决了。2.就是上下滚动，平滑滚动，触摸屏滚动，实现的不是很到。虽然是解决了一部 "+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
"分问题，但是另外一部分问题又冒出来了。下面我重点老讨论这个问题。希望大家有什么好的想法也说下。分享下经验，让我少走弯路关于UI组件，上下滚动，
平滑滚动的视线技术探讨在我设计的UI中存在的两个问题一直没有解决好1.是焦点处理机制--
这个问题已经在前几天我解决了。2.就是上下滚动，平滑滚动，触摸屏滚动，实现的不是很到。虽然是解决了一部分问题，但是另外一部分问题又冒出来了。下面
我重点老讨论这个问题。希望大家有什么好的想法也说下。分享下经验，让我少走弯路于UI组件，上下滚动，平滑滚动的视线技术探讨在我设计的UI中存在的两
个问题一直没有解决好1.是焦点处理机制--
这个问题已经在前几天我解决了。2.就是上下滚动，平滑滚动，触摸屏滚动，实现的不是很到。虽然是解决了一部分问题，但是另外一部分问题又冒出来了。下面
我重点老讨论这个问题。希望大家有什么好的想法也说下。分享下经验，让我少走弯路sdf" +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "是焦点处理机制--
这个问题已经在前几天我解决了。2.就是上下滚动，平滑滚动，触摸屏滚动，实现的不是很到。虽然是解决了一部分问题，但是另外一部分问题又冒出来了。下是
焦点处理机制--
这个问题已经在前几天我解决了。2.就是上下滚动，平滑滚动，触摸屏滚动，实现的不是很到。虽然是解决了一部分问题，但是另外一部分问题又冒出来了。下是
焦点处理机制--
这个问题已经在前几天我解决了。2.就是上下滚动，平滑滚动，触摸屏滚动，实现的不是很到。虽然是解决了一部分问题，但是另外一部分问题又冒出来了。下是
焦点处理机制--
这个问题已经在前几天我解决了。2.就是上下滚动，平滑滚动，触摸屏滚动，实现的不是很到。虽然是解决了一部分问题，但是另外一部分问题又冒出来了。下是
焦点处理机制--
这个问题已经在前几天我解决了。2.就是上下滚动，平滑滚动，触摸屏滚动，实现的不是很到。虽然是解决了一部分问题，但是另外一部分问题又冒出来了。下是
焦点处理机制--
这个问题已经在前几天我解决了。2.就是上下滚动，平滑滚动，触摸屏滚动，实现的不是很到。虽然是解决了一部分问题，但是另外一部分问题又冒出来了。下是
焦点处理机制--
这个问题已经在前几天我解决了。2.就是上下滚动，平滑滚动，触摸屏滚动，实现的不是很到。虽然是解决了一部分问题，但是另外一部分问题又冒出来了。下是
焦点处理机制--
这个问题已经在前几天我解决了。2.就是上下滚动，平滑滚动，触摸屏滚动，实现的不是很到。虽然是解决了一部分问题，但是另外一部分问题又冒出来了。下
";<br />
&nbsp;&nbsp;&nbsp; private int sreenWidth;<br />
&nbsp;&nbsp;&nbsp; private int sreenHeight;<br />
&nbsp;&nbsp;&nbsp; private int scrollHeight;<br />
&nbsp;&nbsp;&nbsp; private int scrollY;<br />
&nbsp;&nbsp;&nbsp; private int regionY;</strong></p>
<p><strong>&nbsp;&nbsp;&nbsp; private int numHeight;</strong></p>
<p><strong>&nbsp;&nbsp;&nbsp; public TestCanvas() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {</strong></p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.setFullScreenMode(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.sreenHeight = this.getHeight();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.sreenWidth = this.getWidth();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</strong></p>
<p><strong>&nbsp;</strong></p>
<p><strong>&nbsp;</strong></p>
<p><strong>&nbsp;&nbsp;&nbsp; protected void paint(Graphics g) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.setColor(0xFFFFFF);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.fillRect(0,0,this.sreenWidth, this.sreenHeight);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char[] chars = text.toCharArray();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int h = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int w = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Font font&nbsp; = g.getFont();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.setColor(0x00000);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0; i<text><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(w &gt; this.sreenWidth - 18){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; h += font.getHeight();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.drawChar(chars,w, h + this.regionY, Graphics.TOP | Graphics.LEFT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w += font.charWidth(chars);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(this.numHeight == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.numHeight = h+font.getHeight();</text></strong></p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.scrollHeight = this.sreenHeight * this.sreenHeight/numHeight;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.scrollY = (-this.regionY)*this.sreenHeight/numHeight;</strong></p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.setColor(255);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.fillRect(this.sreenWidth-6,0, 6, this.sreenHeight);</strong></p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.setColor(0xFFFFFF);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.fillRect(this.sreenWidth-5,this.scrollY, 4, this.scrollHeight);<br />
&nbsp;&nbsp;&nbsp; }</strong></p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp; public void keyPressed(int keyCode) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(keyCode);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(keyCode == -2){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(this.sreenHeight - this.regionY&nbsp; &gt; this.numHeight)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.regionY -= 30;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (keyCode == -1){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(this.regionY&gt;=0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.regionY += 30;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.repaint();<br />
&nbsp;&nbsp;&nbsp;&nbsp; }</strong></p>
<strong>}
</strong><img src ="http://www.blogjava.net/gooogle/aggbug/153148.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-10-16 08:53 <a href="http://www.blogjava.net/gooogle/archive/2007/10/16/153148.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 3G视线J2ME 工具包0.0.1版本发布了</title><link>http://www.blogjava.net/gooogle/archive/2007/10/07/150814.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Sun, 07 Oct 2007 04:03:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/10/07/150814.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/150814.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/10/07/150814.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/150814.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/150814.html</trackback:ping><description><![CDATA[<div style="margin-left: 15px; margin-top: 5px;">
<strong>关键字:</strong> J2ME &nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;
</div>
自己利用国庆的时间，把以前自己做过，实践过的一些想法，整合成了一堆代码跟<span href="http://www.3geye.net/bbs/tag.php?name=%C0%FD%D7%D3" class="t_tag">例子</span>，我暂且把它们叫做 <span 1,="" 2);="">3G视线J2ME 工具包0.0.1版本。<br />
<br 1,="" 2);="" />
<span 1,="" 2);="">里面的内容包括：<br />
<br />
</span></span>
<h3><font size="4">关于我们</font></h3>
<ul>
    <li>3GEye  是由一个<span href="http://www.3geye.net/bbs/tag.php?name=%C8%ED%BC%FE" class="t_tag">软件</span>自由职业团队组成，他们分散不同的地方，但是却有一个相同的目的--致力于中国<span href="http://www.3geye.net/bbs/tag.php?name=%CA%D6%BB%FA" class="t_tag">手机</span>软件<span href="http://www.3geye.net/bbs/tag.php?name=%BF%AA%B7%A2" class="t_tag">开发</span>的普及，3G就快要到来了，我们不想在落后别人了。<span href="http://www.3geye.net/bbs/tag.php?name=%CA%D6%BB%FA%C8%ED%BC%FE" class="t_tag">手机软件</span>开发对于我们这些人来说是个机会，对爱好手机软件的<span href="http://www.3geye.net/bbs/tag.php?name=%C5%F3%D3%D1" class="t_tag">朋友</span>也是个机会，我们得抓住这个机会，来吧，一起学习手机软件开发吧。不管是<span href="http://www.3geye.net/bbs/tag.php?name=JAVA" class="t_tag">JAVA</span>  ME， SYMBAIN，WINCE，LINUX这些都不是门槛，能阻挡我们的只有我们自己.  </li>
    <li>wuhua -- 从事J2EE2年，对于JAVA ME来说是个新手，  </li>
    <li>Sun -- 从事手机开发多年，在流媒体方面有比较深刻的<span href="http://www.3geye.net/bbs/tag.php?name=%D1%D0%BE%BF" class="t_tag">研究</span>  </li>
    <li>Fang_W -- 从事多年企业开发，对手机软件开发情有独钟  </li>
    <li> <br />
    </li>
    <li> <br />
    </li>
    <li><br />
    </li>
</ul>
<h3><font size="4">软件版本 0.0.1</font></h3>
<h3><font size="4">此软件<span href="http://www.3geye.net/bbs/tag.php?name=%D4%B4%B4%FA%C2%EB" class="t_tag">源代码</span>，以及相关<span href="http://www.3geye.net/bbs/tag.php?name=%CE%C4%B5%B5" class="t_tag">文档</span>版权归3G视线所有，转载，以及用作其他用途，请注明来自3G视线。 部分版权归其他<span href="http://www.3geye.net/bbs/tag.php?name=%D7%F7%D5%DF" class="t_tag">作者</span>所有</font>。</h3>
<br />
<h5><font size="4">版权声明：此<span href="http://www.3geye.net/bbs/tag.php?name=%B3%CC%D0%F2" class="t_tag">程序</span>包版归3G视线所有，部分代码是从<span href="http://www.3geye.net/bbs/tag.php?name=%CD%F8%C2%E7" class="t_tag">网络</span>上收集回来，版权归他们所有，公布出来只是用于学习，交流之用，如需要进行商业开发，必须经过作者的同意，否则追究法律责任。</font></h5>
<ul>
    <h3><span href="http://www.3geye.net/bbs/tag.php?name=%B9%A6%C4%DC" class="t_tag">功能</span>描述:</h3>
    <li>此包包含了JAVA ME 进行手机开发常用工具箱。里面提供了大量，实用工具，  </li>
    <li>ImageUtil ==&gt; 提供对图像操作工具  </li>
    <li>TextUtil ==&gt; 提供对字符串操作工具  </li>
    <li>MD5Util ==&gt; 提供对MD5算法在JAVA ME的实现类，并提供一个静态方法创建toMD5 得到一个MD5的字符串  </li>
    <li>MemoryManager ==&gt; <span href="http://www.3geye.net/bbs/tag.php?name=%C4%DA%B4%E6" class="t_tag">内存</span>管理，写的很差，可以考虑采用<span href="http://www.3geye.net/bbs/tag.php?name=%CF%DF%B3%CC" class="t_tag">线程</span>的方式进行内存管理,以及采用线程的方式自动执行垃圾回收了  </li>
    <li>TimerTaskManager ==&gt; 构建一个可以执行的TimerTask，使用程序调用变的简单  </li>
    <li>WMAUtil ==&gt; 提供WMA的常用功能  </li>
    <li>Common ==&gt; 提供项目常用方法  </li>
    <li>GraphicsUtil ==&gt; 图形常用功能集  </li>
    <li>DateTime ==&gt; 简单的日期，时间格式化  </li>
    <li> <br />
    </li>
    <li> <br />
    </li>
    <li><br />
    </li>
</ul>
如果上面的程序有bug，我们期待您的加盟 <a href="http://www.3geye.net/bbs/bbs">加入3G视线论坛</a> 一起体验手机软件开发的快乐 <br />
<br />
<br />
<br />
<h5><font size="4">版权声明：此程序包版归3G视线所有，部分代码是从网络上收集回来，版权归他们所有，公布出来只是用于学习，交流之用，如需要进行商业开发，必须经过作者的同意，否则追究法律责任。</font></h5>
<ul>
    <h3><font size="4">功能描述:</font></h3>
    <li>此包提供对工具的的<span href="http://www.3geye.net/bbs/tag.php?name=api" class="t_tag">api</span>进行测试  </li>
    <li>util包下面的API测试可以运行这个包下面的<span href="http://www.3geye.net/bbs/tag.php?name=MIDlet" class="t_tag">MIDlet</span>程序，每个MIDlet程序对应一个util，如果不需要用到MIDlet，则表示不采用extends的方式继承MIDlet，用户可以到test目录浏览源代码。里面有比较详细的代码注释   </li>
    <li>ImageMDIlet ==&gt; 对ImageUtil进行测试，提供图片放大，缩小，透明等功能  </li>
    <li>TextMIDlet ==&gt; 对TextUtil进行测试，提供文本的分割，显示等功能  </li>
    <li>MD5Test ==&gt; 提供对MD5进行测试，输入可以看到MD5码的转换  </li>
    <li>TimerTaskDemo ==&gt; TimerTask的简单例子  </li>
    <li>DrawFontMIDlet ==&gt; 波浪<span href="http://www.3geye.net/bbs/tag.php?name=%D7%D6%CC%E5" class="t_tag">字体</span>的例子  </li>
    <li>ToumingMIDlet ==&gt; 透明的例子  </li>
    <li>GraphicsMIDlet ==&gt; 图形的例子  </li>
    <li>MemoryManagerDemo ==&gt; 内存管理的例子，写的不是很好  </li>
    <li>ArrayListDemo ==&gt; ArrayList的例子  </li>
    <li>CommonDemo ==&gt; Common的例子  </li>
    <li>DateTime ==&gt; DateTime的例子  </li>
    <li>SMSSenderMIDlet ==&gt; 短信发送机  </li>
    <li>SMSLotteryMIDlet ==&gt; 一个小型彩票的实例  </li>
    <li>HTTPImageClientMIDlet ==&gt; 一个经典的网络下载图片的例子  </li>
    <li>StartDemo ==&gt; 使用GameCanvas制作星空<span href="http://www.3geye.net/bbs/tag.php?name=%D0%A7%B9%FB" class="t_tag">效果</span>, 此代码并非原创，只是整理。  </li>
    <li> <br />
    </li>
    <li> <br />
    </li>
    <li><br />
    </li>
</ul>
<font color="blue" size="3">如果上面的程序有bug，我们期待您的加盟</font> <a href="http://www.3geye.net/bbs/bbs">加入3G视线论坛</a> 一起体验手机软件开发的快乐 <br />
<br />
源代码下载到这里<br />
<a href="http://www.3geye.net/bbs/thread-223-1-1.html">http://www.3geye.net/bbs/thread-223-1-1.html</a><img src ="http://www.blogjava.net/gooogle/aggbug/150814.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-10-07 12:03 <a href="http://www.blogjava.net/gooogle/archive/2007/10/07/150814.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自己写的内存管理工具类，支持简单的垃圾回收</title><link>http://www.blogjava.net/gooogle/archive/2007/10/05/150560.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Fri, 05 Oct 2007 07:34:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/10/05/150560.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/150560.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/10/05/150560.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/150560.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/150560.html</trackback:ping><description><![CDATA[http://www.3geye.net/bbs/thread-221-1-1.html 原文地址，<br />
<br />
<h2>自己写的内存管理工具类，支持简单的垃圾回收</h2>
开发J2AVA ME 程序最需要关注的是内存的占用，开发性能高，适配多种机型的软件不是件容易的事情，我在国庆时间整理下我的开发思路写了这个类，给大家参考下<br />
<br />
<br />
package com.gggeye.util;<br />
<br />
import java.util.Hashtable;<br />
import java.util.Stack;<br />
import java.util.TimerTask;<br />
import java.util.Vector;<br />
<br />
import com.gggeye.demo.Logger;<br />
<br />
&nbsp;<br />
<br />
&nbsp;<br />
&nbsp;/**<br />
&nbsp; *&nbsp; 内存管理，工具类，主要是用于项目的内存控制，<br />
&nbsp; *&nbsp; 此类相对重要点，因为涉及到各个方面的内存回收<br />
&nbsp; *&nbsp; 此类除了提供一些常用的方法进行回收外，还还提供一个自动回收的机制，不过不建议采用，自动回收机制是是当<br />
&nbsp; *&nbsp; 空闲内存小于指定内存大小时候，释放内存，回收的时间是5秒回收一次&lt;br/&gt;<br />
&nbsp; * 创建日期 2007-10-1<br />
&nbsp; * @author wuhua <br />
&nbsp; * &lt;p&gt;&lt;b&gt;MSN &lt;/b&gt; gggeye@hotmail.com <br />
&nbsp; * &lt;p&gt;&lt;b&gt;EMAIL&lt;/b&gt; gooogledev@gmail.com &lt;/p&gt;<br />
&nbsp; * &lt;p&gt;网站支持 &lt;a href="http://www.3geye.net"&gt;http://www.3geye.net&lt;/a&gt;&lt;/p&gt;<br />
&nbsp; * &lt;p&gt;网站论坛 &lt;a href="http://www.3geye.net/bbs"&gt;http://www.3geye.net/bbs&lt;/a&gt;&lt;/p&gt;<br />
&nbsp; * &lt;p&gt;wuhua的博客 &lt;a href="http://wuhua.3geye.net"&gt;http://wuhua.3geye.net&lt;/a&gt;&lt;/p&gt;<br />
&nbsp; */<br />
public&nbsp;&nbsp; class MemoryManager implements Runnable {<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 释放内存，当内存小于addtionMemory时候，进行垃圾回收，主动回收<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param addtionMemory<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public final static void release(long addtionMemory) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; long freeMemory = Runtime.getRuntime().freeMemory();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //如果空闲的内存小于指定的内存，则回收<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(freeMemory&lt;=addtionMemory){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Logger.println("回收前的内存==&gt;" +MemoryManager.freeMemoryKByte());<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.gc();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Logger.println("回收后的内存==&gt;" +MemoryManager.freeMemoryKByte());<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 释放指定缓存对象<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param addtionMemory<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param cache<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public final static void release(long addtionMemory, Object cache){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; release(addtionMemory);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(cache != null){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(cache instanceof java.util.Hashtable){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Hashtable i = (Hashtable)cache;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; i.clear();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }else if(cache instanceof java.util.Vector){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Vector i = (Vector)cache;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; i.removeAllElements();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }else if(cache instanceof java.util.Stack){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Stack i = (Stack)cache;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; i.removeAllElements();<br />
&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; cache = null;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.gc();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 得到系统空闲内存，单位是k<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return 返回空闲内存的大小<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public final static String freeMemoryKByte(){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return freeMemoryByte()/1024 + "k";<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public final static long&nbsp; freeMemoryByte(){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return Runtime.getRuntime().freeMemory();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp; private static MemoryManager instance ;<br />
&nbsp;&nbsp;&nbsp; private static TimerTask task;<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 自动回收内存机制,此方法，应该在系统第一次调用的时候调用，如果重复调用则会抛出异常<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param time<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public static void autoGC(long time) throws java.lang.RuntimeException{<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(instance == null){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; instance&nbsp; = new MemoryManager();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; task = TimerTaskManager.getInstace().create(instance, time);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }else<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throw new RuntimeException("GC is starting...");<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public static void colse(){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(instance != null) instance = null;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(task != null){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; task.cancel();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; task = null;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 实现对内存的自动化管理<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public void run() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //小于12k内存的时候释放内存<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; release(1200000);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
}<br /><img src ="http://www.blogjava.net/gooogle/aggbug/150560.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-10-05 15:34 <a href="http://www.blogjava.net/gooogle/archive/2007/10/05/150560.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用GameCanvas制作星空效果</title><link>http://www.blogjava.net/gooogle/archive/2007/09/23/147621.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Sun, 23 Sep 2007 13:30:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/09/23/147621.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/147621.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/09/23/147621.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/147621.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/147621.html</trackback:ping><description><![CDATA[http://www.3geye.net/bbs/thread-164-1-1.html<br />
<br />
<div id="postmessage_245">MIDP2.0中提供了游戏开发专用的API,比如GameCanvas等类。他们位于javax.microedition.lcdui.game包内。本文介绍GameCanvas的基本使用方法并实现一种滚动星空的效果。您可以参考Game
Canvas Basic获得更详细的信息。
<p>&nbsp;&nbsp;&nbsp;
GameCanvas是Canvas的子类，因此他同样继承了Canvas类的一些特性，比如showNotify()方法会在Canvas被显示在屏幕的时候调用，而hideNotify()会在Canvas离开屏幕的时候被调用。我们可以把他们当作{8}来使用，用于初始化和销毁资源。比如<br />
&nbsp;&nbsp;&nbsp;
// When the canvas is shown, start a thread to<br />
&nbsp;&nbsp;&nbsp; // run the game loop.</p>
<p>&nbsp;&nbsp;&nbsp; protected void showNotify()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; random = new
Random();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; thread = new Thread(this);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
thread.start();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; // When the game canvas is hidden, stop the
thread.</p>
<p>&nbsp;&nbsp;&nbsp; protected void hideNotify()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; thread = null;<br />
&nbsp;&nbsp;&nbsp;
}</p>
<p>在游戏开发中最重要的就是接受用户触发的事件然后重新绘制屏幕，通常我们使用getKeyStates()方法判断哪个键被按下了，然后绘制屏幕，调用flushGraphics()。在GameCanvas中，系统事实上已经为我们实现了双缓冲技术，因此每次我们绘制的时候就是在off-
screen上绘制的。结束后通过flushGraphics把它复制到屏幕上去。下面是典型的接受事件、处理逻辑、绘制屏幕的代码。<br />
&nbsp;// Get the
Graphics object for the off-screen buffer<br />
Graphics g = getGraphics();</p>
<p>while (true) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Check user input and update positions if
necessary<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int keyState = getKeyStates();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((keyState &amp;
LEFT_PRESSED) != 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sprite.move(-1, 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else
if ((keyState &amp; RIGHT_PRESSED) != 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sprite.move(1,
0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>// Clear the background to
white<br />
g.setColor(0xFFFFFF);<br />
g.fillRect(0,0,getWidth(), getHeight());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Draw the Sprite<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sprite.paint(g);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Flush the off-screen buffer<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flushGraphics();<br />
}</p>
<p>&nbsp;&nbsp;&nbsp;
下面开始实现我们滚动星空的效果，其实设计的思想非常简单。我们启动一个线程，使用copyArea()方法把屏幕的内容往下复制一个像素的距离。然后绘画第一个空白的直线，随机的在直线上绘画点儿，这样看起来就像星空一样了。逻辑代码如下：<br />
&nbsp;&nbsp;&nbsp;
// The game loop.</p>
<p>&nbsp;&nbsp;&nbsp; public void run()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int w = getWidth();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int
h = getHeight() - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (thread ==
Thread.currentThread())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Increment or decrement
the scrolling interval<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // based on key presses<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int
state = getKeyStates();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((state &amp; DOWN_PRESSED) != 0)<br />
&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; sleepTime += SLEEP_INCREMENT;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(sleepTime &gt; SLEEP_MAX)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleepTime =
SLEEP_MAX;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if ((state &amp; UP_PRESSED) !=
0)<br />
&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; sleepTime -=
SLEEP_INCREMENT;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (sleepTime &lt; 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
sleepTime = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Repaint the screen by first scrolling the<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //
existing starfield down one and painting in<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // new stars...</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; graphics.copyArea(0, 0, w, h, 0, 1, Graphics.TOP |
Graphics.LEFT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; graphics.setColor(0, 0, 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
graphics.drawLine(0, 0, w, 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; graphics.setColor(255, 255,
255);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; w; ++i)<br />
&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; int test = Math.abs(random.nextInt()) %
100;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (test &lt; 5)<br />
&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; graphics.drawLine(i, 0, i, 0);<br />
&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; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flushGraphics();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Now wait...</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />
&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;
Thread.currentThread().sleep(sleepTime);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch
(InterruptedException e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;
}</p>
<p>下面给出源代码<br />
/*<br />
&nbsp;* License<br />
&nbsp;*<br />
&nbsp;* Copyright 1994-2004 Sun Microsystems,
Inc. All Rights Reserved.<br />
&nbsp;* <br />
&nbsp;*/</p>
<p>import javax.microedition.lcdui.*;<br />
import
javax.microedition.lcdui.game.*;<br />
import javax.microedition.midlet.*;</p>
<p>public class GameCanvasTest extends MIDlet implements
CommandListener<br />
{</p>
<p>&nbsp;&nbsp;&nbsp; private Display display;</p>
<p>&nbsp;&nbsp;&nbsp; public static final Command exitCommand = new Command("Exit",
Command.EXIT,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1);</p>
<p>&nbsp;&nbsp;&nbsp; public GameCanvasTest()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void commandAction(Command c, Displayable d)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (c == exitCommand)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exitMIDlet();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; protected void destroyApp(boolean unconditional)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws
MIDletStateChangeException<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exitMIDlet();<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void exitMIDlet()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; notifyDestroyed();<br />
&nbsp;&nbsp;&nbsp;
}</p>
<p>&nbsp;&nbsp;&nbsp; public Display getDisplay()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return display;<br />
&nbsp;&nbsp;&nbsp;
}</p>
<p>&nbsp;&nbsp;&nbsp; protected void initMIDlet()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GameCanvas c = new
StarField();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.addCommand(exitCommand);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
c.setCommandListener(this);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getDisplay().setCurrent(c);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; protected void pauseApp()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; protected void startApp() throws MIDletStateChangeException<br />
&nbsp;&nbsp;&nbsp;
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (display == null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; display =
Display.getDisplay(this);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; initMIDlet();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;
}<br />
}<br />
/*<br />
&nbsp;* License<br />
&nbsp;*<br />
&nbsp;* Copyright 1994-2004 Sun Microsystems,
Inc. All Rights Reserved.<br />
&nbsp;*/</p>
<p>import java.util.Random;<br />
import javax.microedition.lcdui.*;<br />
import
javax.microedition.lcdui.game.GameCanvas;</p>
<p>// A simple example of a game canvas that displays<br />
// a scrolling star
field. Use the UP and DOWN keys<br />
// to speed up or slow down the rate of
scrolling.</p>
<p>public class StarField extends GameCanvas implements Runnable<br />
{</p>
<p>&nbsp;&nbsp;&nbsp; private static final int SLEEP_INCREMENT = 10;</p>
<p>&nbsp;&nbsp;&nbsp; private static final int SLEEP_INITIAL = 150;</p>
<p>&nbsp;&nbsp;&nbsp; private static final int SLEEP_MAX = 300;</p>
<p>&nbsp;&nbsp;&nbsp; private Graphics graphics;</p>
<p>&nbsp;&nbsp;&nbsp; private Random random;</p>
<p>&nbsp;&nbsp;&nbsp; private int sleepTime = SLEEP_INITIAL;</p>
<p>&nbsp;&nbsp;&nbsp; private volatile Thread thread;</p>
<p>&nbsp;&nbsp;&nbsp; public StarField()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super(true);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; graphics = getGraphics();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; graphics.setColor(0, 0,
0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; graphics.fillRect(0, 0, getWidth(), getHeight());<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; // The game loop.</p>
<p>&nbsp;&nbsp;&nbsp; public void run()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int w = getWidth();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int
h = getHeight() - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (thread ==
Thread.currentThread())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Increment or decrement
the scrolling interval<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // based on key presses<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int
state = getKeyStates();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((state &amp; DOWN_PRESSED) != 0)<br />
&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; sleepTime += SLEEP_INCREMENT;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(sleepTime &gt; SLEEP_MAX)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleepTime =
SLEEP_MAX;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if ((state &amp; UP_PRESSED) !=
0)<br />
&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; sleepTime -=
SLEEP_INCREMENT;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (sleepTime &lt; 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
sleepTime = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Repaint the screen by first scrolling the<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //
existing starfield down one and painting in<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // new stars...</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; graphics.copyArea(0, 0, w, h, 0, 1, Graphics.TOP |
Graphics.LEFT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; graphics.setColor(0, 0, 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
graphics.drawLine(0, 0, w, 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; graphics.setColor(255, 255,
255);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; w; ++i)<br />
&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; int test = Math.abs(random.nextInt()) %
100;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (test &lt; 5)<br />
&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; graphics.drawLine(i, 0, i, 0);<br />
&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; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flushGraphics();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Now wait...</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />
&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;
Thread.sleep(sleepTime);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (InterruptedException
e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; // When the canvas is shown, start a thread to<br />
&nbsp;&nbsp;&nbsp; // run the game
loop.</p>
<p>&nbsp;&nbsp;&nbsp; protected void showNotify()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; random = new
Random();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; thread = new Thread(this);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
thread.start();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; // When the game canvas is hidden, stop the
thread.</p>
<p>&nbsp;&nbsp;&nbsp; protected void hideNotify()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; thread = null;<br />
&nbsp;&nbsp;&nbsp;
}<br />
}</p>
</div>
<br />
<br />
<br /><img src ="http://www.blogjava.net/gooogle/aggbug/147621.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-09-23 21:30 <a href="http://www.blogjava.net/gooogle/archive/2007/09/23/147621.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决 Maximum byte code length (32kB) exceeded问题查看( 0 ) / 评论( 0 ) / 评分( 0 / 0 )</title><link>http://www.blogjava.net/gooogle/archive/2007/09/19/146431.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Wed, 19 Sep 2007 05:12:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/09/19/146431.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/146431.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/09/19/146431.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/146431.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/146431.html</trackback:ping><description><![CDATA[我的另外一个博客，<a href="http://www.3geye.net">http://www.3geye.net</a><br />
在设计J2me程序中，如果类过大很容易就出现 Maximum byte code length (32kB) exceeded这样的问题，该怎么解决呢，办法很简单，把这个类 拆成几个小类就ok了。<br />
哈<br />
<br /><img src ="http://www.blogjava.net/gooogle/aggbug/146431.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-09-19 13:12 <a href="http://www.blogjava.net/gooogle/archive/2007/09/19/146431.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>怎么样设计一款优秀的J2ME软件初稿</title><link>http://www.blogjava.net/gooogle/archive/2007/09/18/146051.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Tue, 18 Sep 2007 01:25:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/09/18/146051.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/146051.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/09/18/146051.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/146051.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/146051.html</trackback:ping><description><![CDATA[前言<br />
<br />
JAVA ME这个技术出现到现在也有好多年了，这段时间，大家对这项技术的褒贬不一。我们暂且不讨论这些，我今天就拿我做项目的经验来说。该怎么样设计一款优秀的JAVA ME手机软件。这篇文章不是纯技术性的文章，只要稍微做过项目的朋友都是可以看的明白了，里面的观点只是代码自己的个人观点。说的不对的地方望大家多多指教。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先我们来说说J2me的高级UI应用情况吧:<br />
<br />
1． 游戏，根本就不采用高级UI，用到的只是高级UI调用本地输入法。<br />
<br />
2． 企业应用，相对要求交互性高，实时快，用户界面友好的应用来说，高级UI的应用情况跟游戏查不错<br />
<br />
3． 简单的例子教程，更不就拿不出收的手机软件，大部分采用高级UI，因为高级UI简单方便，容易描述。<br />
<br />
综上所述，高级UI根本就不适合现在的企业应用，以及游戏开发<br />
<br />
这方面的例子有UCWEB，航海家，Fadato足球客户端，Bobi足球即时工具，QQ系列软件，在线直播，手机娱乐软件，Mino邮件客户端等等。。。这一系列证明高级UI的应用不多。在这些系统里面用到最多的就是软件的配置，输入法的调用，错误的提示（Alert）等<br />
<br />
&nbsp;<br />
<br />
JSR规范制定的成功之处。<br />
<br />
开发手机软件虽然没有开发电脑软件工作量那么大，但是要考虑到的东西一点都不比电脑软件少，理由如下：<br />
<br />
1． 硬件配置远不如电脑<br />
<br />
2． 操作系统过于分散<br />
<br />
&nbsp;<br />
<br />
JSR就是为了这些差异而出现的。<br />
<br />
用户可以通过查询api来查看自己的手机是否之处这样的功能过，而做出选择。<br />
<br />
&nbsp;<br />
<br />
上面是废话。下面看看怎么样设计一款好软件吧<br />
<br />
1． 用户界面友好，一套可定制的UI组件。<br />
<br />
2． 用户操作逻辑合理，专业的策划组织<br />
<br />
3． 一套合理的内存管理，这样才可以保证软件的稳定性<br />
<br />
4． 适应需求的软件结构模式。<br />
<br />
5． 性能方面一定要好。<br />
<br />
&nbsp;<br />
<br />
上面是一款软件基本的条件，要想让这个软件被人们广泛解释的话，还需要解决下面的问题：<br />
<br />
1． 手机型号支持，尽量匹配多种机型，在不能保证支持全部机型的条件下，最起码支持主流的手机厂商的手机<br />
<br />
2． 为各个机型定制一些特别的服务，比如有些手机支持JSR75，可以考虑保存更多的东西到本机手机上，有些不支持，可可以考虑用RMS等，有些支持媒体类型多点，手机上也可以为这类手机定制多点服务<br />
<br />
3． 一款好产品，必须有一个社区想扶持，所以一个热门的产品社区是少不了的。<br />
<br />
4． 个人感觉，单机版的软件不可能取得很大的成功，一定要采用C/S的方式来取得用户对产品的粘度<br />
<br />
5． 罗马也不是1天就可以建成的，所以软件也不是一出来就很完美，所以就要不停的对软件进行更新，维护工作，这是最重要的，好软件的其中之一的标准就是看看这个软件发展到什么版本了，版本也高，证明你的软件的生命厉越强<br />
<br /><img src ="http://www.blogjava.net/gooogle/aggbug/146051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-09-18 09:25 <a href="http://www.blogjava.net/gooogle/archive/2007/09/18/146051.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>颜色渐变选择条的实现</title><link>http://www.blogjava.net/gooogle/archive/2007/09/13/144776.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Thu, 13 Sep 2007 03:15:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/09/13/144776.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/144776.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/09/13/144776.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/144776.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/144776.html</trackback:ping><description><![CDATA[<a href="http://www.3geye.net">3G视线</a> -- 专注手机软件开发<br />
<br />
原文出处<a href="http://www.3geye.net/?uid-3-action-viewspace-itemid-111">http://www.3geye.net/?uid-3-action-viewspace-itemid-111</a><br />
<br />
<br />
对于自定义UI的设计，涉及到的工作量是很大的，有时候往往要实现一种UI效果而花费大量的时间去思考，找路子，然后实践，运气好的话，自然OK，运气不好，那就很惨了。浪费时间，还没有效果。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不过还好有很多前辈总结出了一些方法跟代码，下面就让我们来看下，<a href="javascript:;" onclick="javascript:tagshow(event, '%D1%D5%C9%AB%BD%A5%B1%E4');" target="_self"><u><strong>颜色渐变</strong></u></a>效果的实现吧。实践了这么，感觉就这个代码比较好，颜色渐变的比较平滑。很舒服。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面是效果图<br />
<p><img style="cursor: pointer;" title="点击图片可在新窗口打开" src="http://www.3geye.net/bbs/attachments/month_0709/20070911_c1994af44dd1d2cbb3d12GME5EHS8HHc.jpg" onload="attachimg(this, 'load')" onmouseover="attachimginfo(this, 'attach_1', 1);attachimg(this, 'mouseover')" onclick="zoom(this, 'attachments/month_0709/20070911_c1994af44dd1d2cbb3d12GME5EHS8HHc.jpg')" onmouseout="attachimginfo(this, 'attach_1', 0, event)" alt="" border="0" /></p>
<br />
<p><br />
</p>
<p>下面是实现代码，大家可以参考下，也许还有更优化的设计呢。</p>
<p>下面代码也是从Intenet来的，只是修改了下。</p>
<p>/**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 绘制渐变色选择条<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param g<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param color<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param x<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param y<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param width<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param height<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public final static void drawShadeRect(Graphics g,&nbsp;&nbsp; int color, int x , int y, int width, int height){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;int[] rgb = getShadeColor(color, width);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;for (int by = y; by &lt; y + 20; by += 4)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int nTemp = y + 20 - (by - y);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; nTemp = nTemp&gt;4 ? 4:nTemp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; g.drawRGB(rgb, 0, width, x, by, width,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; nTemp, true);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 获取颜色渐变RGB数组，<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 为了获取这个数据，而又跟CLDC1.0兼容，导致项目增加了一个Float类<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 导致程序变大<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param width<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public final static int[] getShadeColor(int color , int width){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;int[] rgb;<br />
&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; int shadeWidth = width;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; int nRgbData = shadeWidth * 4;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rgb = new int[nRgbData];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; int alpha = -127;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; for (int i = 0; i &lt; shadeWidth; i++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; alpha = -127 + i;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //主要算法在这里。<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int col = color | (128 - alpha &lt;&lt; 24);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rgb[i]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = col;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rgb[i + shadeWidth&nbsp;&nbsp;&nbsp; ] = col;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rgb[i + shadeWidth * 2] = col;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rgb[i + shadeWidth * 3] = col;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; return rgb;<br />
&nbsp;&nbsp;&nbsp; }</p>
<br />
<p><br />
</p>
<p>就两个静态方法很简单的。哈<br />
</p><img src ="http://www.blogjava.net/gooogle/aggbug/144776.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-09-13 11:15 <a href="http://www.blogjava.net/gooogle/archive/2007/09/13/144776.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>素爱K700c &amp; K500C 的按键问题--可能是手机虚拟机的实现问题</title><link>http://www.blogjava.net/gooogle/archive/2007/09/12/144651.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Wed, 12 Sep 2007 15:28:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/09/12/144651.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/144651.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/09/12/144651.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/144651.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/144651.html</trackback:ping><description><![CDATA[<br />
<a href="http://www.3geye.net">3G视线</a> -- 专注手机软件开发<br />
<br />
<br />
原文出处 <a title="3G视线" href="http://javaeye.5d6d.com" >3G视线</a> <a href="http://www.3geye.net/bbs/viewthread.php?tid=79">http://www.3geye.net/bbs/viewthread.php?tid=79</a><br />
<br />
今天处理一个项目的时候，发现我台素爱K700C遇到一个超级奇怪的问题<br />
K700C在采用Canvas 设计，调用keyPressed(int keyCode)的时候，出现一个<br />
Left Right按键的时候没有反应，也打印不出什么结果。<br />
应该来说Left=-6，Right= -7才对，不过按下去却没有任何放映；<br />
考虑下是否全屏幕的问题：按照我的思考如下<br />
1.非全屏状态下，这两个键值是不给Canvas使用的<br />
2.非全屏状态下，这两个键值保留给系统使用（Cammond）；<br />
<br />
不过在全屏的状态下也出现了一个问题。<br />
问题如下：<br />
1.可能获取Left ，Right后，系统跳出<br />
哈哈。终于找到问题所在了。原来是Canvas getKeyName(int keyCode)会抛出异常，而程序没有捕获这个异常，导致程序出问题。<br />
其中K500C也有同样的问题。<img src ="http://www.blogjava.net/gooogle/aggbug/144651.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-09-12 23:28 <a href="http://www.blogjava.net/gooogle/archive/2007/09/12/144651.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2ME Polish 全攻略之理解各个配置参数</title><link>http://www.blogjava.net/gooogle/archive/2007/09/04/142579.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Tue, 04 Sep 2007 04:12:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/09/04/142579.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/142579.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/09/04/142579.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/142579.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/142579.html</trackback:ping><description><![CDATA[<p><strong><span style="font-size: 18pt;">J2ME Polish </span></strong><strong><span style="font-size: 18pt; font-family: 宋体;">全攻略之理解各个配置参数</span></strong></p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">前段日子我写了</span> J2ME Polish <span style="font-family: 宋体;">全攻略之入门</span><span style="font-family: 宋体;">这篇文章。虽然写的不怎么样，不过却是带了不少人入门。</span></p>
<p><span style="font-family: 宋体;">现在摘录网上的一段话来描述</span>J2ME Polish<span style="font-family: 宋体;">现状</span></p>
<p style="text-indent: 15.5pt;"><strong><span style="font-family: 宋体; color: #ff6600;">希望开始研究</span></strong><strong><span style="color: #ff6600;">J2ME-POLISH</span></strong><strong><span style="font-family: 宋体; color: #ff6600;">先有点心理准备</span></strong></p>
<p style="text-indent: 15.5pt;"><strong><span style="color: #ff6600;">ui</span></strong><strong><span style="font-family: 宋体; color: #ff6600;">的问题多多，</span></strong><strong><span style="font-family: 宋体; color: #ff6600;">特别是他所支持的</span></strong><strong><span style="color: #ff6600;">CSS </span></strong><strong><span style="font-family: 宋体; color: #ff6600;">没有说明是哪个版本的</span></strong><strong><span style="color: #ff6600;">CSS</span></strong><strong><span style="font-family: 宋体; color: #ff6600;">，有时让人挺迷惑的。但是</span></strong><strong><span style="color: #ff6600;">build</span></strong><strong><span style="font-family: 宋体; color: #ff6600;">工具还是不错的。</span></strong><strong><span style="color: #ff6600;">Build script</span></strong><strong><span style="font-family: 宋体; color: #ff6600;">写起来有点不像他文档中说的那么简单。我个人认为新手不易</span></strong></p>
<p style="text-indent: 15.5pt;"><strong><span style="color: #ff6600;">&nbsp;</span></strong><strong><span style="font-family: 宋体; color: black;">从上面的话可以看书，</span></strong><strong><span style="color: black;">J2ME
Polish</span></strong><strong><span style="font-family: 宋体; color: black;">虽火，但是要想流行起来，相关的入门，深入文档还是比不可以少的。由于国人的习惯，如果有比较好的中文文档，对他们来说是最好的事情，</span></strong><strong><span style="color: black;">3G</span></strong><strong><span style="font-family: 宋体; color: black;">视线</span></strong><strong><span style="font-family: 宋体; color: black;">致力于这些工作，我们不是什么专业的作家，只是记录下我们工作的经验，供大家一起学习</span></strong></p>
<p style="text-indent: 15.5pt;"><strong><span style="font-family: 宋体; color: black;">今天我们看看</span></strong><strong><span style="color: black;">J2ME
Polish</span></strong><strong><span style="font-family: 宋体; color: black;">的配置文件的关系已经怎么样加入自己的东西，</span></strong></p>
<p style="text-indent: 15.5pt;"><strong><span style="font-family: 宋体; color: black;">比如加入自己的厂家规范，</span></strong><strong><span style="color: black;">api</span></strong><strong><span style="font-family: 宋体; color: black;">规范等。</span></strong></p>
<p style="text-indent: 15.5pt;"><strong><span style="font-family: 宋体; color: black;">看看</span></strong><strong><span style="color: black;">J2ME
Polish</span></strong><strong><span style="font-family: 宋体; color: black;">的配置目录结构</span></strong></p>
<p style="text-indent: 15.5pt;"><strong><span style="font-family: 宋体; color: black;">安装</span></strong><strong><span style="color: black;">J2ME
Polish</span></strong><strong><span style="font-family: 宋体; color: black;">打开安装目录就可以看到这些文件</span></strong></p>
<p style="text-indent: 15.5pt;"><strong><span style="color: black;">apis.xml&nbsp;-- </span></strong><strong><span style="font-family: 宋体; color: black;">描述一些常用的设备</span></strong><strong><span style="color: black;">JCP</span></strong><strong><span style="font-family: 宋体; color: black;">规范支持的库，比如</span></strong><strong><span style="color: black;">MMAPI</span></strong><strong><span style="font-family: 宋体; color: black;">的描述啊等，</span></strong></p>
<p style="text-indent: 15.5pt;"><strong><span style="color: black;">custom-css-attributes.xml &nbsp;-- </span></strong><strong><span style="font-family: 宋体; color: black;">可为自己的</span></strong><strong><span style="color: black;">GUI</span></strong><strong><span style="font-family: 宋体; color: black;">程序定制</span></strong><strong><span style="color: black;">CSS</span></strong><strong><span style="font-family: 宋体; color: black;">样式</span></strong></p>
<p style="text-indent: 15.5pt;"><strong><span style="color: black;">custom-devices.xml&nbsp;-- </span></strong><strong><span style="font-family: 宋体; color: black;">自定义驱动，补充官方没有提供的驱动。</span></strong></p>
<p style="text-indent: 15.5pt;"><strong><span style="color: black;">devices.xml - - </span></strong><strong><span style="font-family: 宋体; color: black;">定义所有已知的设备，你可以定义或者修改这些已存在的规范和使用改变过的配置用在您的代码中</span></strong></p>
<p style="text-indent: 15.5pt;"><strong><span style="color: black;">groups.xml &#8211; </span></strong><strong><span style="font-family: 宋体; color: black;">定义驱动组，每一个驱动可以在任意一个组下面</span></strong></p>
<p style="text-indent: 15.5pt;"><strong><span style="color: black;">vendors.xml - - </span></strong><strong><span style="font-family: 宋体; color: black;">可自定义的厂家</span></strong><strong><span style="color: black;">J2ME</span></strong><strong><span style="font-family: 宋体; color: black;">规范</span></strong></p>
<p><strong>&nbsp;</strong></p>
<p><strong><span style="font-family: 宋体; color: black;">上面是一些配置的介绍，要想弄得</span></strong><strong><span style="color: black;">J2ME Polish</span></strong><strong><span style="font-family: 宋体; color: black;">的</span></strong><strong><span style="color: black;">Build</span></strong><strong><span style="font-family: 宋体; color: black;">的功能，弄得他们的关系是很重要的。</span></strong></p>
<p><strong>&nbsp;</strong></p>
<p><strong><span style="font-family: 宋体; color: black;">下面来定制我们需要的功能吧。</span></strong></p>
<p><strong><span style="font-family: 宋体; color: black;">首先我们来定义自己的。</span></strong><strong><span style="color: black;">Apis</span></strong><strong><span style="font-family: 宋体; color: black;">以及</span></strong><strong><span style="color: black;">Vendors</span></strong><strong><span style="font-family: 宋体; color: black;">，</span></strong></p>
<p><strong><span style="color: black;">Vendors </span></strong><strong><span style="font-family: 宋体; color: black;">我们定义一个</span></strong><strong><span style="color: black;">ID</span></strong><strong><span style="font-family: 宋体; color: black;">是</span></strong><strong><span style="color: #ff6600;">3Geye</span></strong><strong><span style="font-family: 宋体; color: black;">。</span></strong></p>
<p><strong><span style="color: black;">Apis </span></strong><strong><span style="font-family: 宋体; color: black;">定义一个</span></strong><strong><span style="color: black;">&nbsp;</span></strong><strong><span style="color: #ff6600;">3Geye/k700</span></strong></p>
<p><strong><span style="font-family: 宋体; color: black;">然后在</span></strong><strong><span style="color: black;">bulid</span></strong><strong><span style="font-family: 宋体; color: black;">上改下：</span></strong></p>
<p><strong><span style="color: black;">&lt;deviceRequirements&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;requirement
name="Identifier" value="</span></strong><strong><span style="color: #ff6600;">3Geye/k700</span></strong><strong><span style="color: black;">"/&gt;</span></strong></p>
<p><strong><span style="color: black;">&lt;/deviceRequirements&gt;</span></strong></p>
<p><strong>&nbsp;</strong></p>
<p><strong><span style="font-family: 宋体; color: black;">第一步：</span></strong></p>
<p><strong><span style="font-family: 宋体; color: black;">下面我们现在到</span></strong><strong><span style="color: black;">Vendors</span></strong><strong><span style="font-family: 宋体; color: black;">上看看</span></strong></p>
<p><strong><span style="font-family: 宋体; color: black;">我们拉到这个文件的底部，复制一个</span></strong><strong><span style="color: black;">Vendor</span></strong><strong><span style="font-family: 宋体; color: black;">，然后修改下，就</span></strong><strong><span style="color: black;">ok</span></strong><strong><span style="font-family: 宋体; color: black;">了</span></strong></p>
<p><strong>&nbsp;</strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;vendor&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;3Geye&lt;/name&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;capability
name="JavaConfiguration" value="CLDC/1.0" /&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;features&gt;hasCommandKeyEvents&lt;/features&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;capability
name="JavaConfiguration" value="CLDC/1.0" /&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;capability
name="keys.CommandKeys" value="21, 22, 23" /&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;capability
name="key.LeftSoftKey" value="21" /&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;capability
name="key.RightSoftKey" value="22" /&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;capability
name="key.MiddleSoftKey" value="23" /&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;capability
name="key.ChangeInputModeKey" value="48" /&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;capability
name="key.ChangeNumericalAlphaInputModeKey" value="35"
/&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;capability
name="TextField.charactersKeyStar" value=" " /&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/vendor&gt;</span></strong></p>
<p><strong><span style="font-family: 宋体; color: black;">这个是参照</span></strong><strong><span style="color: black;">moto</span></strong><strong><span style="font-family: 宋体; color: black;">修改的</span></strong></p>
<p><strong>&nbsp;</strong></p>
<p><strong><span style="font-family: 宋体; color: black;">第二步：</span></strong></p>
<p><strong><span style="font-family: 宋体; color: black;">修改</span></strong><strong><span style="color: black;">devices</span></strong></p>
<p><strong><span style="color: black;">&lt;device</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; supportsPolishGui="true"
&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;identifier&gt;3Geye/k700&lt;/identifier&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;features&gt;isVirtual&lt;/features&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groups&gt;Series60&lt;/groups&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;capability
name="OS" value="Symbian"/&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;capability
name="JavaPackage" value="mmapi, wmapi, </span></strong><strong><span style="color: #ff6600;">pdaapi</span></strong><strong><span style="color: black;"> " /&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;capability
name="JavaPlatform" value="MIDP/2.0" /&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;capability
name="JavaConfiguration" value="CLDC/1.0" /&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;capability
name="VideoFormat" value="3gpp" /&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;capability
name="SoundFormat" value="midi, amr" /&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;capability
name="Bugs" value="dateFieldAcceptsNoNullDate" /&gt;</span></strong></p>
<p><strong><span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/device&gt;</span></strong></p>
<p><strong><span style="font-family: 宋体; color: black;">这样我们就定义了一个</span></strong><strong><span style="color: black;">3Geye/k700de&nbsp;device</span></strong><strong><span style="font-family: 宋体; color: black;">了，如果你扩展了</span></strong><strong><span style="color: black;">apis</span></strong><strong><span style="font-family: 宋体; color: black;">，你应该把扩展的</span></strong><strong><span style="color: black;">ID</span></strong></p>
<p><strong><span style="font-family: 宋体; color: black;">填入</span></strong><strong><span style="color: black;">JavaPackage</span></strong><strong><span style="font-family: 宋体; color: black;">这个参数里面。我在上面添加了一个</span></strong><strong><span style="color: black;">pdaapi</span></strong><strong><span style="font-family: 宋体; color: black;">，对</span></strong><strong><span style="color: black;">jsr75</span></strong><strong><span style="font-family: 宋体; color: black;">的支持。</span></strong></p>
<p><strong><span style="font-family: 宋体; color: black;">然后测试下。</span></strong></p>
<p><strong><span style="font-family: 宋体; color: black;">在这里可就可以看到结果了。</span></strong></p>
<ul type="disc">
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">Ant </span></li>
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">StdOut </span></li>
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">Buildfile:
    build.xml </span></li>
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">init: </span></li>
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">j2mepolish: </span></li>
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">[j2mepolish]
    J2ME Polish 1.2.4 </span></li>
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">[j2mepolish]
    Using locale [en]... </span></li>
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">[j2mepolish]
    preprocessing for device [3Geye/k700]. </span></li>
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">[j2mepolish]
    compiling for device [3Geye/k700]. </span></li>
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">[j2mepolish-javac-3Geye/k700]
    Compiling 3 source files to
    E:"Company"Project"slide"build"real"3Geye"k700"en"classes </span></li>
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">[j2mepolish]
    obfuscating for device [3Geye/k700]. </span></li>
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">[j2mepolish]
    Starting obfuscation with ProGuard. </span></li>
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">[j2mepolish]
    ProGuard, version 3.2 </span></li>
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">[j2mepolish]
    Preparing output jar [E:"Company"Project"slide"build"real"dest.jar] </span></li>
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">[j2mepolish]
    ProGuard has successfully finished obfuscation. </span></li>
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">[j2mepolish]
    preverifying for device [3Geye/k700]. </span></li>
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">[j2mepolish]
    creating JAR file [E:"Company"Project"slide"dist"sysinfo.jar]. </span></li>
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">[j2mepolish]
    creating JAD file [E:"Company"Project"slide"dist"sysinfo.jad]. </span></li>
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">BUILD
    SUCCESSFUL </span></li>
    <li style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">Total time:
    14 seconds </span></li>
</ul>
<p><strong><span style="font-family: 宋体; color: black;">这些是</span></strong><strong><span style="color: black;">JBuilder2005</span></strong><strong><span style="font-family: 宋体; color: black;">测试的结果。</span></strong></p>
<p><strong><span style="font-family: 宋体; color: black;">在这里我发现</span></strong><strong><span style="color: black;">J2ME Polish&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="font-family: 宋体; color: black;">确实不错。以后我会出一些更多关于它的文章，请继续关注</span></strong></p>
<p><strong>&nbsp;</strong></p><img src ="http://www.blogjava.net/gooogle/aggbug/142579.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-09-04 12:12 <a href="http://www.blogjava.net/gooogle/archive/2007/09/04/142579.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>目前国内支持JAVA平台终端详细资料</title><link>http://www.blogjava.net/gooogle/archive/2007/09/02/142049.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Sun, 02 Sep 2007 04:39:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/09/02/142049.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/142049.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/09/02/142049.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/142049.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/142049.html</trackback:ping><description><![CDATA[目前国内支持JAVA平台终端详细资料<br />
<br />
<p>&nbsp;目前国内支持JAVA平台终端详细资料（资料帖）<br />
<a href="http://www.everenter.com/bbs/dispbbs.asp?boardID=5&amp;ID=205">http://www.everenter.com/bbs/dispbbs.asp?boardID=5&amp;ID=205</a></p>
<p><strong>目前国内支持JAVA平台终端详细资料</strong><br />
</p>
<div id="fontsize_549"><br />
<font color="#0000ff"><strong>NOKIA&nbsp;6610</strong></font><br />
<br />
&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;<a id="ImgSpan" onfocus="this.blur()" href="mhtml:file://%5C%5C192.168.3.151%5Cpublic%5Capp%5Cj2me%5C%E7%9B%AE%E5%89%8D%E5%9B%BD%E5%86%85%E6%94%AF%E6%8C%81JAVA%E5%B9%B3%E5%8F%B0%E7%BB%88%E7%AB%AF%E8%AF%A6%E7%BB%86%E8%B5%84%E6%96%991.mht%21http://www.everenter.com/BBS/UploadImages/no6610.gif" target="_blank"><img alt="" src="mhtml:file://%5C%5C192.168.3.151%5Cpublic%5Capp%5Cj2me%5C%E7%9B%AE%E5%89%8D%E5%9B%BD%E5%86%85%E6%94%AF%E6%8C%81JAVA%E5%B9%B3%E5%8F%B0%E7%BB%88%E7%AB%AF%E8%AF%A6%E7%BB%86%E8%B5%84%E6%96%991.mht%21http://www.everenter.com/BBS/UploadImages/no6610.gif" dypop="按此在新窗口浏览图片" border="0" /></a><br />
&nbsp;&nbsp;<br />
〖规格参数〗&nbsp;<br />
&nbsp;<br />
网络频率：&nbsp;GSM&nbsp;GPRS；900/1800/1900MHz&nbsp;<br />
可选颜色：&nbsp;黑色、银白色&nbsp;<br />
尺寸/体积：&nbsp;106&#215;45&#215;17.5mm/71cm3&nbsp;<br />
重　量　：&nbsp;84&nbsp;克&nbsp;<br />
屏幕参数：&nbsp;4096色彩色屏幕；128&#215;128象素；&nbsp;<br />
通话时间：&nbsp;120-300&nbsp;分钟&nbsp;※&nbsp;<br />
待机时间：&nbsp;150-300&nbsp;小时&nbsp;※&nbsp;<br />
上市时间：&nbsp;2002年11月&nbsp;<br />
标准配置：&nbsp;锂电池、充电器、光盘、收音机耳塞&nbsp;<br />
&nbsp;<br />
〖主要功能〗&nbsp;&nbsp;<br />
&nbsp;<br />
『时钟』『内置振动』『通话时间提示』『通话记录』&nbsp;<br />
『免提通话』『图形菜单』『EFR&nbsp;STK支持』&nbsp;<br />
<br />
可换外壳：&nbsp;可更换六种颜色彩壳：黑、红、粉、灰绿、深褐、黄&nbsp;<br />
WAP上网：&nbsp;WAP&nbsp;1.2.1&nbsp;<br />
中文输入：&nbsp;T9&nbsp;<br />
中文短信：&nbsp;中文短信息收发。存储最多75个文字短信或25个图片短信，图片预置10个，最多可保存35个平均大小为10K的图片&nbsp;<br />
多媒体短信：&nbsp;存储最多12个最大30K的MMS短信&nbsp;<br />
可选铃声：&nbsp;31&nbsp;首&nbsp;<br />
和弦铃声：&nbsp;4&nbsp;和弦；MIDI（合成音）铃声（预置31个,用户自选空间20个）&nbsp;<br />
话机通讯录：&nbsp;300人&#215;1条，共300条&nbsp;<br />
内置游戏：&nbsp;可下载互动游戏&nbsp;<br />
动画屏保：&nbsp;时钟式&nbsp;<br />
<br />
『红外接口』&nbsp;『支持E-Mail』&nbsp;<br />
<br />
无线下载：&nbsp;下载铃声、图片、游戏等；全新合成音铃声可通过MMS接收，通过WAP或使用Nokia&nbsp;<img src="http://images.5d6d.com/dz6/smilies//titter.gif" smilieid="9" alt="" border="0" />C套件&nbsp;5.0通过互联网从Club&nbsp;Nokia**下载&nbsp;<br />
无线数据通讯：&nbsp;内置Modem；HSCSD（这种HSCSD功能可以保证大家使用43.2kbps的速度浏览互联网）&nbsp;<br />
支持收音机：&nbsp;内置立体声调频收音机，环绕立体声&nbsp;<br />
Java扩展：&nbsp;Java游戏&nbsp;<br />
<br />
『闹钟』&nbsp;『计算器』&nbsp;『定时器』&nbsp;『秒表』&nbsp;<br />
『自动键盘锁』&nbsp;『世界时钟』&nbsp;<br />
<br />
日历：&nbsp;最多可设250条备忘&nbsp;<br />
记事本：&nbsp;最多30条记录&nbsp;<br />
日程表：&nbsp;最多可设250条备忘&nbsp;<br />
货币换算：&nbsp;转换器（汇率、气温、重量和其他度量衡<br />
<br />
由于太多内容，详情请看，里面保护了几十个东西。<br />
<a href="http://javaeye.5d6d.com/thread-241-1-1.html">http://javaeye.5d6d.com/thread-241-1-1.html</a><br />
</div><img src ="http://www.blogjava.net/gooogle/aggbug/142049.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-09-02 12:39 <a href="http://www.blogjava.net/gooogle/archive/2007/09/02/142049.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSR规范，系统参数测试大全</title><link>http://www.blogjava.net/gooogle/archive/2007/09/02/142042.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Sun, 02 Sep 2007 03:03:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/09/02/142042.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/142042.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/09/02/142042.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/142042.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/142042.html</trackback:ping><description><![CDATA[<a href="http://javaeye.5d6d.com">3G视线</a> -- 专注手机软件开发<br />
<span style="font-size: 24pt;"><br />
<span style="font-size: 24pt;"><span style="font-size: 14pt;"><strong><span style="color: red;">需要源代码的到这里 <a href="http://javaeye.5d6d.com/thread-251-1-1.html">http://javaeye.5d6d.com/thread-251-1-1.html</a></span></strong></span></span></span><span style="font-size: 24pt;"><span style="font-size: 14pt;"><strong><span style="color: red;"><a href="http://javaeye.5d6d.com/thread-251-1-1.html"></a></span></strong></span></span><a href="http://javaeye.5d6d.com/thread-251-1-1.html"></a><br />
<br />
<font size="3">    你是否觉得，开发J2ME程序太麻烦呢?<br />
一.每一个手机，没一个平台都不同，JSR支持不同，屏幕大小不同，字体不同，颜色深度不同，手机内存大小不同，RMS资源管理不同，RMS支持大小不
同，Cavans全屏模式不同，各个厂家有自己扩展的API又不同，WINCE，Sybmain，Linux，真是所谓的Write
Once，Debug Anywhere. 开发这东西还要匹配N中手机，N种平台。是不是很苦恼啊。<br />
二.开发手机程序，最重要的就是网络支持，要设计符合中国国情的无线网络程序也是一个小挑战。、<br />
三.其他...。<br />
没关系，我们先来看看JSR规范，系统参数测试大全，让我们了解这手机到底支持什么先，然后我们再下手开发。<br />
<br />
这个程序能提供的功能有：<br />
1.JSR规范测试，检查设备对JSR规范的支持，以及版本号<br />
2.对手机屏幕，字体，颜色的检查<br />
3.对系统一些参数的检查，比如检查是否CLDC1.0，或者是CLDC1.1等等<br />
4.对图片，声音，视频支持的格式进行全面的罗列。<br />
5.其他...。<br />
<br />
鉴于很多用户都没有浏览权限，所以我在这里说明下，需要源代码的同志留下Email。对了，强调一点，一定要在我论坛上留，否则的话不给与支持。没办法被逼的<br />
谢谢合作<br />
<br />
留了Email在线会发送过去的。</font><br /><img src ="http://www.blogjava.net/gooogle/aggbug/142042.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-09-02 11:03 <a href="http://www.blogjava.net/gooogle/archive/2007/09/02/142042.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MIDPV2。0规范</title><link>http://www.blogjava.net/gooogle/archive/2007/09/01/141897.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Sat, 01 Sep 2007 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/09/01/141897.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/141897.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/09/01/141897.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/141897.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/141897.html</trackback:ping><description><![CDATA[<a href="http://javaeye.5d6d.com">3G视线</a> -- 专注手机软件开发<br />
<br />
<br />
MIDPV2。0规范！<br />
<br />
<br />
<font size="3">一 简介： </font>
<p><font size="3">MIDP v2.0是由JCP(Java Community
Process)制订的，该规范的制订是由大约50个公司共同参与设计参见附录一。MIDP
v2.0规范设计的目的是定义一体系架构，相应的APIs，从而为第三方的移动信息设备（MIDs〕应用的开发提供一开放的标准环境。 </font>
</p>
<p><font size="3">MIDP v2.0规范是在MIDP v1.0规范的基础上设计的，它保证了同MIDP v1.0的兼容性。即在MIDP v1.0上编写的MIDlets能在MIDP v2.0上执行。 </font>
</p>
<p><font size="3">根据J2ME定义的体系架构，MIDP被设计在CLDC的基础上运行。关于CLDC的资料可以参见:
http://jcp.org/jsr/detail/30.jsp.虽然MIDP
v2.0规范是在CLDC1.0所提供的功能的基础上制订的，但它仍能运行在CLDC1.1的基础上，以及以后的更新版本。但我们希望MIDP
v2.0的实现最好在CLDC1.1的基础上。 </font>
</p>
<p><font size="3">二 J2ME 架构： </font>
</p>
<p><font size="3">Java自1995年发明以来以发生了很大的变化，从最早的为基于溜览器中运行的Applet的编程，到
Servlet/EJB的Server编程，再到现在的MIDlet为无线信息设备的编程。它已发展成为为开发者提供一端到端编程开发的平台，即我们常说
的
J2SE/J2EE/J2ME,Java的三个平台(fig1)。由于无线编程有其完全不同于传统编程的特殊性，比如：运行设备的多样性，设备处理能力不
如服务器和微机，用户界面的差异性等。另外在加上无线技术的飞速发展，使得J2ME的体系架构有者完全不同于J2SE/J2EE的特点。 </font>
</p>
<p><font size="3">图1: Java 的三个平台 </font>
</p>
<p><font size="3">J2ME的架构是把我们传统的Java架构：硬件/OS/JVM/APIs/应用加一变化，变成了：硬件/OS/Configuration/Progile/应用。之所以采用这样的架构是由我们上面所谈到的J2ME的特殊性有关。 </font>
</p>
<p><br />
<font size="3">图2: J2ME的架构 </font>
</p>
<p><font size="3">J2ME/CLDC/MIDP作为J2ME的一个版本，它是专为无线移动通讯设备说设计的，在下面我们简单介绍它的体系架构。从下图中我们可以看到： </font>
</p>
<p><font size="3">图3: CLDC/MIDP架构 </font>
</p>
<p><font size="3">1.在CLDC之上有两类API:<br />
－MIDP APIs: 这些APIs正是MIDP v.0规范所要定义的APIs.<br />
- OEM-specific APIs: MIDP规范所涉及的无线通讯设备多种多样，因此它不可能 涉及所有设备 的需求。因此这一类的APIs是由OEM厂商提供以便访问特定设备的特定功能。但基于这些APIs的应用可能不能在其它的MIDs设备上运行。<br />
2.MID应用的种类：<br />
－MIDP: 一个MIDP应用或称为MIDet，它必需只使用MIDP和CLDC规范中所定义的APIs。该类应用能在应是在MID设备上最常见的应用。<br />
－OEM-specific: 一个OEM-specific的应用会使用一些不在MIDP中定义的PIs(OEM-specific classes) 。这些应用不能在不同的MIDs设备上运行。<br />
－Native: 一个本地应用使指用非Java语言编写的直接运行于设备操作系统之上的应用。在MIDP规范中不涉及OEM-specific和Native的应用。 </font>
</p>
<p><br />
<font size="3">三 MID v2.0规范所涉及的范围： </font>
</p>
<p><font size="3">我们都知道无线信息设备（MIDs〕的功能多种多样。但MIDP规范并不是要对这些设备的所有功能都要加以
定义，并提供APIs编程。相反MIDP v1.0和MIDP
v2.0的专家组同意只针对有通用并且成功实施的功能的需求制订相应的APIs。在MIDP v1.0中这些功能包括： </font>
</p>
<p><font size="3">－ 应用的下载<br />
－ 应用的生命周期<br />
－ 端到端的传输(http)<br />
－ 网络联结<br />
－ 数据库存储<br />
－ 计时器<br />
－ 用户界面 </font>
</p>
<p><font size="3">通过用户对MIDP v1.0的使用经验和反馈，MIDP v2.0的专家组在MIDP v1.0 APIs的基础上又新加了下面的 APIs: </font>
</p>
<p><font size="3">－ 应用的下载和计费<br />
－ 端到端的安全传输(https)<br />
－ 应用的数字签名和域的安全模式<br />
－ MIDlet的push注册(server push model)<br />
－ 声音 </font>
</p>
<p><font size="3">基于上面所讲的同样的原因，一些功能是不会在MIDP的定义范围内，这些功能包括：<br />
－ 系统层的APIs: MIDP APIs的重点是针对应用的开发者，而不是系统开发。因此一些底层的涉及系统接口的APIs，比如无线信息设备的电源管理，语音的编码模块就属于系统层的APIs而不在MIDP所讨论的范围内。<br />
－ 底层的安全：MIDP规范不涉及底层的安全的功能，它只使用CLDC所提供的底层的安全机制。 </font>
</p>
<p><font size="3">关于MIDP v2.0的新APIs在本文中我们不加以介绍。 </font>
</p>
<p><font size="3">四 MIDP v2.0的安全机制： </font>
</p>
<p><font size="3">我们知道Java语言作为以种网络编程语言，它具有很多特点来满足网络编程的需求，其中最为人们所津津乐道
的是它的遍写一次到处运行，以及它的安全性。特别是它的安全性，从它的发明道现在的7年的时间已经为无数的事实所证明。Java语言的安全性，安全机制也
有它发展的过程，下面我们简单介绍以下Java的安全机制。 </font>
</p>
<p><font size="3">1.Java1.0的沙箱机制： </font>
</p>
<p><br />
<font size="3">fig3: Java1.0安全的沙箱机制 </font>
</p>
<p><br />
<font size="3">上图所描述的是Java1.0的沙箱机制，它最早是为在溜览器中运行的Applet所设计。因
Applet的运行代码是通过网络传输到用户的机器中，为了防止恶意代码，该机制把用户应用简单分为本地应用和网络应用(applet)。对网络应用它只
能放问一些安全的 APIs从而保证安全性。但该机制过于简单，无法很好满足开发者的需求。 </font>
</p>
<p><font size="3">2.Java1.1的可信任代码的安全机制： </font>
</p>
<p><br />
<font size="3">fig4: 可信任代码的安全机制<br />
该安全机制只是在Java1.0沙箱安全机制的基础上，引入一种新的网络应用，及可信任的网络应用，但并未对所访问的资源进行很好的划分。大家从图中可看出，应用要吗受沙箱的约束，只能访问有限资源，要么就能访问所有资源。 </font>
</p>
<p><font size="3">3.Java1.2/2的域安全机制： </font>
</p>
<p><br />
<font size="3">Java1.2/2的域安全机制 </font>
</p>
<p><font size="3">该安全机制通过配置文件对Java的应用以及访问的资源进行配置，从而实现了一种非常细化的安全机制。 </font>
</p>
<p><font size="3">4.MIDP安全机制及其发展： </font>
</p>
<p><font size="3">MIDP1.0规范在制订时由于当时的无线网络尚处于发展阶段，因此在考虑MIDP
v1.0的安全机制时没有太多考虑应用在网络传输过程中安全性的设置，而是把重点放在无线应用在设备上的运行过程中的安全性上。因此MIDP1.0规范通
过沙箱的安全机制来提供MIDlet
suite运行时的安全性，该机制保证MIDlet所能调用的APIs不能访问设备的敏感信息和功能。在MIDP2.0安全机制的制订过程中，专家组采纳
了用户对MIDP v1.0安全机制所提出的意见：即1.0版本的安全性太&#8220;强&#8221;使得很多的无线设备的功能<br />
不能通过MIDP的编程来加以使用。比
如说手机中地址本的访问等。如果要把这些敏感功能的APIs开放让用户的应用访问，就必须引入一种新的安全机制。该机制就是我们前面所描述的
Java1.2/2的域的安全机制。在MIDP v2.0中对不被信任的MIDlet则只能运行于该沙箱安全机制中。任何一种MIDP
v2.0的实现，必需支持非信任的MIDlet的在MIDs设备上的运行。 </font>
</p>
<p><font size="3">MIDP2.0引入了信任的MIDlet的新概念，对于信任的MIDlet它能使用一些敏感的和被限制使用
的APIs.当无线信息设备检测到一MIDlet
sute是可信任时，则它对APIs的访问由相应的安全域的策略定义。我们将在下面的章节中详悉介绍。当验证一MIDlet
suite是否能信任时发生错误，则该MIDlet suite必需被拒绝<br />
执行。 </font>
</p>
<p><font size="3">5.MIDP2.0的域的安全机制：<br />
非信任的MIDlet Suites </font>
</p>
<p><font size="3">一非信任的MIDlet suite是指MIDlet
suite的下载源和JAR文件的完整性不能被下载的设备所信任。对于非信任的MIDlet
suite必需只能运行于非信任的安全域中，在该域中对受保护的APIs或功能不能访问或由设备使用者确定可以访问或不可以访问。任何一MIDP1.0兼
容的MIDlet suite能在MIDP v2.0的实现上用非信任的模式运行。对于非信任的MIDlet suites它能访问它的JAR
manifest和application desctiptor文件以及下面的APIs: </font>
</p>
<p><font size="3">－ javax.microedition.rms<br />
－ javax.microedition.midlet<br />
－ javax.microedition.lcdui<br />
－ javax.microedition.lcdui.game<br />
－ javax.microedition.media<br />
－ javax.microedition.media.control<br />
非信任安全域对以下APIs或功能的访问必须由用户确定可以或不可以： </font>
</p>
<p><font size="3">－ javax.microedition.io.HttpConnection<br />
－ javax.microedition.io.HttpsConnection<br />
可信任的 MIDlet Suite 的安全： </font>
</p>
<p><font size="3">可信任的 MIDlet Suite 的安全是建立在保护域的机制上。每一保护域定义了该域中的
MIDlet suite 的访问权限。该保护域的定义者可以定义设备怎样确认和验证它能信任的 MIDlet suite
并把该域所允许和授权使用的受保护的APIs和功能绑定给该MIDlet suite。设备所使用的验证和信任MIDlet
suite的机制的定义是分开的，这样有利于人们根据设备，网络，和商业模式的不同来进行选择。可信任的 MIDlet Suites使用X.509
PKI的签名和验证机制来确定一MIDlet suites的可信任性。 </font>
</p>
<p><font size="3">在MIDP2.0的域的安全机制中，大家主要回涉及以下概念：<br />
保护域： 是MIDlet suite所允许的权限访问的集合<br />
权限访问： 是指必须通过授权才能使用的 APIs 或功能<br />
信任MIDlet Suite： 指该MIDlet suite能通过验证并其JAR文件的完整性能被保证，并能被该设备上的某一保护域所信任。<br />
配置文件： 一配置文件中包含许多域或别名的定义。每一域由包含所赋于的权限和用户操作所构成。 </font>
</p>
<p><font size="3">配置文件的例子： </font>
</p>
<p><font size="3">domain: O= MIDlet Underwriters, Inc. , C=US <br />
allow: javax.microedition.io.HttpConnection <br />
oneshot(oneshot): javax.microedition.io.CommConnection <br />
alias: client_connections javax.microedition.io.SocketConnection, javax.microedition.io.SecureConnection, <br />
javax.microedition.io.HttpConnection, <br />
javax.microedition.io.HttpsConnection <br />
domain: O=Acme Wireless, OU=Software Assurance <br />
allow: client_connections <br />
allow: javax.microedition.io.ServerSocketConnection, javax.microedition.io.UDPDatagramConnection <br />
oneshot(oneshot): javax.microedition.io.CommConnection <br />
domain: allnet <br />
blanket(session): client_connections <br />
oneshot: javax.microedition.io.CommConnection </font>
</p>
<p><font size="3">五. 总结： </font>
</p>
<p><font size="3">MIDP v2.0是为广大的开发者在无线移动通讯设备上提供的一个开放的Java平台，它具有开放性，通用性，以及比MIDP v1.0更强的安全功能。它是由全球约五十多家厂商所共同制定的，因此基于MIDP v2.0的应用在将来回有很广泛的应用前景。 </font>
</p>
<p><font size="3">附录一：MIDP v2.0 的专家组: </font>
</p>
<p><font size="3">公司： </font>
</p>
<p><font size="3">4thpass Inc, AGEA Corporation, Alcatel, Aplix
Corporation, AromaSoft Corp, Baltimore Technologies CELLon France,
Distributed Systems Technology Centre, Elata PLC, Esmertec, Espial
Group Inc, France Telecom / Orange, Fujitsu Limited, German Aerospace
Center (DLR), Institute of Communications and Navigation, Hitachi
Ltd./Digital Media Group, In Fusio, J-PhoneEast Co. Ltd, Logica Mobile
Networks, Mitsubishi Electric Corp, Mobile Scope AG, Mobilitec,
Motorola, NEC Corporation, Nextel Communications Inc, Nokia, NTT
DoCoMo, Inc, Omnitel Pronto Italia S.p.A, One 2 One, Openwave Systems<br />
,
Inc, Orange (UK), Palm, Philips Consumer Communications, Philips
Semiconductors, Research In Motion (RIM), Samsung Electronics Co., Ltd,
Sharp Labs, Siemens AG, Siemens ICM, Smart Fusion, Sony Ericsson Mobile
Communications, Sun Microsystems, Inc, Symbian Ltd, Telef'nica M'viles
Espa'a, Vaultus, Inc, Veloxsoft, Inc, Vodafone Global Platform &amp;
Internet Services, Vodafone Group Services Limited, Vodafone
Multimedia, Zucotto Wireless, <br />
个人： </font>
</p>
<p><font size="3">Fabio Ciucci, Glen Cordrey, Jon Eaves, David Hook, Myank Jain, Neil Katin, Steve Ma, Ravi Reddy Wai Kit Tony Fung </font>
</p><img src ="http://www.blogjava.net/gooogle/aggbug/141897.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-09-01 12:00 <a href="http://www.blogjava.net/gooogle/archive/2007/09/01/141897.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2ME Polish 全攻略之入门</title><link>http://www.blogjava.net/gooogle/archive/2007/08/31/141700.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Fri, 31 Aug 2007 05:18:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/08/31/141700.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/141700.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/08/31/141700.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/141700.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/141700.html</trackback:ping><description><![CDATA[<div id="message435" class="t_msgfont">
<p style="margin-left: 126pt; text-indent: 21pt;"><font size="3"><strong><span style="font-size: 18pt;"><a href="http://www.blogjava.net/gooogle/">爬虫工作室 <br />
</a></span></strong></font></p>
<p style="margin-left: 126pt; text-indent: 21pt;"><font size="3"><strong><span style="font-size: 18pt;">文章出处 3G视线</span></strong></font></p>
<p style="margin-left: 126pt; text-indent: 21pt;"><font size="3"><strong><span style="font-size: 18pt;">连接 : <a href="http://javaeye.5d6d.com/thread-234-1-1.html"><font size="3"><strong></strong></font>http://javaeye.5d6d.com/thread-234-1-1.html</a></span></strong></font></p>
<p style="margin-left: 126pt; text-indent: 21pt;"><font size="3"><strong><span style="font-size: 18pt;">J2ME
Polish </span></strong><strong><span style="font-size: 18pt; font-family: 宋体;">全攻略之入门</span></strong></font></p>
<p><font size="3"><span style="font-family: 宋体;">在看这篇文章之前，我希望读者先浏览</span><strong><span style="font-family: 宋体;">漫游</span></strong><strong> J2ME Polish--</strong><strong><span style="font-family: 宋体;">比较详细的文档</span></strong><strong>.doc </strong><span style="font-family: 宋体;">这篇文章</span></font></p>
<p><font size="3"><strong><span style="font-size: 15pt; font-family: 宋体;">内容简介</span></strong></font></p>
<p style="text-indent: 21pt;"><font size="3">J2ME Polish<span style="font-family: 宋体;">现在很火，很多手机软件开发商都在采用这东西进行二次开发。然后很可惜，网络上关于这方面的中文比较少，所以我根据我学习的经过，整理成文章，希望对初学着以及爱好者有所帮助。</span></font></p>
<p style="margin-left: 29.25pt; text-indent: -18pt;"><font size="3">1．<span style="font-family: 宋体;">到官方</span><span><a href="http://www.j2mepolish.org/">http://www.j2mepolish.org/</a>
</span><span style="font-family: 宋体;">上下载安装包，现在最新版本是</span>2.0 R4<span style="font-family: 宋体;">版本，本人建议安装</span>1.2.4<span style="font-family: 宋体;">版本，因为</span>2.0R4<span style="font-family: 宋体;">版本可能存在一些不兼容以及一些</span>bug<span style="font-family: 宋体;">。本人用</span>2.0R4<span style="font-family: 宋体;">版本的时候，有些例子并不能通过测试</span></font></p>
<p style="margin-left: 29.25pt;"><font size="3"><span style="font-family: 宋体;">运行</span>cmd<span style="font-family: 宋体;">，然后输入</span>java &#8211;jar D:"J2ME Polish.jar<span style="font-family: 宋体;">即可出现提示窗口，然后点下一步，就</span>ok<span style="font-family: 宋体;">了。</span></font></p>
<p style="text-indent: 21pt;"><font size="3"><img src="http://ee.a.5d6d.com/userdirs/9/6/javaeye/attachments/month_0708/20070830_d67c1aeee6b69f10ba7clZe6uLaxCOz7.jpg" onload="attachimg(this, 'load', '点击在新窗口查看全图"  nctrl+鼠标滚轮放大或缩小="" )="" onmouseover="attachimginfo(this, 'attach_72', 1);attachimg(this, 'mouseover')" onclick="attachimg(this, 'click', 'http://ee.a.5d6d.com/userdirs/9/6/javaeye/attachments/month_0708/20070830_d67c1aeee6b69f10ba7clZe6uLaxCOz7.jpg')" onmouseout="attachimginfo(this, 'attach_72', 0, event)" onmousewheel="return imgzoom(this)" alt="" border="0" /><span><!--[if gte vml 1]>
<![endif]--></span></font></p>
<p style="text-indent: 21pt;"><font size="3"><span style="font-family: 宋体;">上面的目录结构很清晰。</span></font></p>
<p style="text-indent: 21pt;"><font size="3"><span style="font-family: 宋体;">其中最</span>import<span style="font-family: 宋体;">是系统引入的包，其中包括一个</span>bulid<span style="font-family: 宋体;">的包，以及其他一些，</span>midp<span style="font-family: 宋体;">等规范包。</span></font></p>
<p style="text-indent: 21pt;"><font size="3">Samples <span style="font-family: 宋体;">是例子文件，我的版本里面只有两个例子，一个是</span>menu<span style="font-family: 宋体;">，描述的是，采用</span>J2ME Polish GUI<span style="font-family: 宋体;">，创建适合各个平台的统一外观的包，基于</span>CSS<span style="font-family: 宋体;">设计的。是</span>UI<span style="font-family: 宋体;">设计的典范，可以具体研究。</span><span>
Sysinfo</span><span style="font-family: 宋体;">是一个系统信息的测试例子，涵盖了几乎所有平台上对</span>jcp<span style="font-family: 宋体;">规范支持等测试信息，是我们开发程序中必须要用到的知识。</span></font></p>
<p style="text-indent: 21pt;"><font size="3">Doc<span style="font-family: 宋体;">是文档，此文档暂没有中文。我们学习起来比较吃力</span></font></p>
<p style="text-indent: 21pt;"><font size="3">Api<span style="font-family: 宋体;">是</span><span>J2ME
Polish</span><span style="font-family: 宋体;">提供给开发人员使用的公共接口</span></font></p>
<p style="text-indent: 21pt;"><font size="3">Bin<span style="font-family: 宋体;">一些可执行文件</span></font></p>
<p style="text-indent: 21pt;"><font size="3"><span style="font-family: 宋体;">其中</span>readme.txt<span style="font-family: 宋体;">文件</span>,<span style="font-family: 宋体;">关于项目的一些描述</span></font></p>
<p style="text-indent: 21pt;"><font size="3">LICENSE.txt <span style="font-family: 宋体;">版权信息</span>,<span style="font-family: 宋体;">作为商业开发者</span>,<span style="font-family: 宋体;">一定要看哦</span></font></p>
<p style="text-indent: 21pt;"><font size="3"><span style="font-family: 宋体;">对于顶级目录下的</span>xml<span style="font-family: 宋体;">文件</span>,<span style="font-family: 宋体;">基本上都是</span><span>J2ME
Polish</span><span style="font-family: 宋体;">的描述文件，很重要的哦。是研究它的最直接的资料，可惜，我也是刚学习，没有深入去了解它</span></font></p>
<p style="text-indent: 21pt;"><font size="3"><span style="font-family: 宋体;">其中</span>groups.xml<span style="font-family: 宋体;">定义了不同的平台下面的东西，比如</span>s40<span style="font-family: 宋体;">，</span>s60<span style="font-family: 宋体;">，</span>s80<span style="font-family: 宋体;">，</span>390<span style="font-family: 宋体;">，等</span>api<span style="font-family: 宋体;">等</span></font></p>
<p style="text-indent: 21pt;"><font size="3">Vendors.xml<span style="font-family: 宋体;">定义了厂商的规范，特性等，比如键值的定义啊。</span>J2ME Polish<span style="font-family: 宋体;">处理键值事件的时候主要是对这些规范进行预编译，所以适合很多平台，厂商。</span></font></p>
<p style="text-indent: 21pt;"><font size="3">Devices.xml<span style="font-family: 宋体;">是对各个平台支持规范程度的描述，此文件包含了很多个平台支持描述。</span></font></p>
<p><font size="3"><span style="font-family: 宋体;">上面的所有配置都是基于</span>xml<span style="font-family: 宋体;">了。可以自己扩展，</span>api<span style="font-family: 宋体;">，配置，以及平台</span></font></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><font size="3">三．<span style="font-family: 宋体;">运行例子</span>Menu<span style="font-family: 宋体;">，</span><span>
SysInfo</span><span style="font-family: 宋体;">。</span></font></p>
<p style="margin-left: 21pt;"><font size="3">2<span style="font-family: 宋体;">．查看</span>bulid.xml<span style="font-family: 宋体;">文件，看看它做了些说明手机，让我们的工作这么轻松愉快</span></font></p>
<p style="text-indent: 21pt;"><font size="3"><span style="font-family: 宋体;">由于贴</span>xml<span style="font-family: 宋体;">文件，</span>word<span style="font-family: 宋体;">并没有进行格式化，所以我这里重点介绍下。</span></font></p>
<p style="text-indent: 21pt;"><font size="3">&lt;project name="enough-j2mepolish-example" default="j2mepolish"&gt;</font></p>
<p style="text-indent: 21pt;"><font size="3"><span style="font-family: 宋体;">这段是说，建立一个</span>project<span style="font-family: 宋体;">，</span><span style="font-family: 宋体;">默认执行的</span>target<span style="font-family: 宋体;">是</span>j2mepolish<span style="font-family: 宋体;">。</span></font></p>
<p style="text-indent: 21pt;"><font size="3"><span>&lt;property name="wtk.home" , value="D:"WTK22"
/&gt;</span></font></p>
<p style="text-indent: 21pt;"><font size="3">WTK<span style="font-family: 宋体;">的安装目录</span></font></p>
<p style="text-indent: 21pt;"><font size="3"><span>&lt;property name="polish.home",
value="D:"Program Files"J2ME-Polish" /&gt;</span></font></p>
<p style="text-indent: 21pt;"><font size="3">J2ME Polish <span style="font-family: 宋体;">的安装目录</span></font></p>
<p style="text-indent: 21pt;"><font size="3">&lt;taskdef name="j2mepolish" </font></p>
<p style="text-indent: 21pt;"><font size="3"><span>classname="de.enough.polish.ant.PolishTask"
</span></font></p>
<p style="text-indent: 21pt;"><font size="3">classpath="${polish.home}/import/enough-j2mepolish-build.jar<img src="http://images.5d6d.com/dz6/smilies//shy.gif" src="http://images.5d6d.com/dz6/smilies//shy.gif" http:=""  images.5d6d. com="" dz6="" smilies=""  shy. gif="" smilieid="8" alt="&lt;img0" />" border="0"&gt;{polish.home}/import/jdom.jar<img src="http://images.5d6d.com/dz6/smilies//shy.gif" src="http://images.5d6d.com/dz6/smilies//shy.gif" http:=""  images.5d6d. com="" dz6="" smilies=""  shy. gif="" smilieid="8" alt="&lt;img0" />" border="0"&gt;{polish.home}/import/proguard.jar<img src="http://images.5d6d.com/dz6/smilies//shy.gif" src="http://images.5d6d.com/dz6/smilies//shy.gif" http:=""  images.5d6d. com="" dz6="" smilies=""  shy. gif="" smilieid="8" alt="&lt;img0" />" border="0"&gt;{polish.home}/yguard-lib.jar<img src="http://images.5d6d.com/dz6/smilies//shy.gif" smilieid="8" alt=":$" border="0" />{wtk.home}/wtklib/kenv.zip"/&gt;</font></p>
<p style="text-indent: 21pt;"><font size="3"><span style="font-family: 宋体;">这个很重要，定义说。执行这个</span>targer<span style="font-family: 宋体;">的</span> Task<span style="font-family: 宋体;">，这里是指执行</span>de.enough.polish.ant.PolishTask<span style="font-family: 宋体;">这个类。具体可以看源代码，看看里面做了些说明手脚</span></font></p>
<p style="text-indent: 21pt;"><font size="3"><span>&lt;obfuscator name="ProGuard"
useDefaultPackage="true" unless="test" &gt;</span></font></p>
<p style="text-indent: 21pt;"><font size="3">&lt;!--</font></p>
<p style="text-indent: 21pt;"><font size="3"><span>You
can set additional parameters here, e.g.:</span></font></p>
<p style="text-indent: 21pt;"><font size="3"><span>&lt;parameter
name="optimize" value="false" /&gt;</span></font></p>
<p style="text-indent: 21pt;"><font size="3">--&gt;</font></p>
<p style="text-indent: 21pt;"><font size="3">&lt;/obfuscator&gt;</font></p>
<p style="text-indent: 21pt;"><font size="3"><span style="font-family: 宋体;">这个用来打包用的，采用</span>ProGuard<span style="font-family: 宋体;">混淆器</span></font></p>
<p style="text-indent: 21pt;"><font size="3"><span style="font-family: 宋体;">其他的自己研究。</span></font></p>
<p style="text-indent: 21pt;"><font size="3"><span style="font-family: 宋体;">我们现在来看看，运行</span>build.xml<span style="font-family: 宋体;">后生成了些什么呢。不看不知道，一看吓一跳，</span></font></p>
<p style="text-indent: 21pt;"><font size="3"><span style="font-family: 宋体;">在</span>build<span style="font-family: 宋体;">的文件夹下面，我发现了好多文件，全部是对于平台不同的资源源代码。原来，</span>J2ME-Polish<span style="font-family: 宋体;">的原理是，通过</span>ant build<span style="font-family: 宋体;">的扩展，然后通过自己的一套</span>API<span style="font-family: 宋体;">，把用户的代码转换成对应各个平台的源代码，然后编译，打包。原理虽然简单，但是这一套却是要花很多功夫</span>ide<span style="font-family: 宋体;">哦。我现在开始有点佩服</span>J2ME Polish<span style="font-family: 宋体;">的创意了。也难怪，我的主管说</span>J2ME Polish<span style="font-family: 宋体;">是个好东西，好以后继续学习</span>J2ME Polish<span style="font-family: 宋体;">的源代码，继续探讨。</span></font></p>
<p><font size="3"><span style="font-family: 宋体;">上面的例子是基于</span>J2ME &#8211; Polish GUI<span style="font-family: 宋体;">的，现在的例子是不</span>import<span style="font-family: 宋体;">任何的</span>J2ME Polish MIDP<span style="font-family: 宋体;">相关的</span>API<span style="font-family: 宋体;">，这样例子对应需要开发。这个例子更简单，按照我刚才所写的方法办即可。</span></font></p>
<p><font size="3"><span style="font-family: 宋体;">顺便介绍下这个例子，这个例子对应开发手机软件来说，也是很有用的。里面包含了对</span>JSR<span style="font-family: 宋体;">规范支持的测试，已经屏幕，按键等相关的测试，很有用。</span></font></p>
</div><img src ="http://www.blogjava.net/gooogle/aggbug/141700.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-08-31 13:18 <a href="http://www.blogjava.net/gooogle/archive/2007/08/31/141700.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取ChoiceGroup多选状态下的值</title><link>http://www.blogjava.net/gooogle/archive/2007/08/30/141495.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Thu, 30 Aug 2007 11:35:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/08/30/141495.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/141495.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/08/30/141495.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/141495.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/141495.html</trackback:ping><description><![CDATA[<div id="message430" class="t_msgfont"><font size="3"><a  href="http://javaeye.5d6d.com/thread-233-1-1.html">http://javaeye.5d6d.com/thread-233-1-1.html</a>
<br><br>怎么样获取ChoiceGroup多选状态下的值呢？<br>连我这个做了几个小项目的程序员，今天都不知道怎么办了。<br>看了api文档不是很清晰，还是动手实践下吧。<br><br>看代码就知道了<br>  boolean[] flags = new boolean[this.images.size()];<br><br><br>        for(int i=0; i &lt; flags.length; i++){<br>            if(flags<em>)<br>                this.images.getString(i); //这里得的选中的值，感觉操作麻烦。<br>     }        <br></em></font></div>
<br><img src ="http://www.blogjava.net/gooogle/aggbug/141495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-08-30 19:35 <a href="http://www.blogjava.net/gooogle/archive/2007/08/30/141495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入分析J2ME平台MIDP低级事件处理机制</title><link>http://www.blogjava.net/gooogle/archive/2007/08/26/139663.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Sun, 26 Aug 2007 15:32:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/08/26/139663.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/139663.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/08/26/139663.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/139663.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/139663.html</trackback:ping><description><![CDATA[原文：<a  href="http://javaeye.5d6d.com/thread-90-1-1.html">http://javaeye.5d6d.com/thread-90-1-1.html
</a><br><br>深入分析J2ME平台MIDP低级事件处理机制<br><br>
<div id="message100" class="t_msgfont"><br>　　通常低级事件的处理是为了满足游戏开发的需要，因为游戏开发相关的问题非常复杂。因此不在这里进行阐述，有兴趣的朋友可以和我索要相关的游戏开发资料。MIDP定义了如下键值在Canvas类内：<br>　　<br>　　KEY_NUM0<br>　　KEY_NUM1<br>　　KEY_NUM2<br>　　KEY_NUM3<br>　　KEY_NUM4<br>　　KEY_NUM5<br>　　KEY_NUM6<br>　　KEY_NUM7<br>　　KEY_NUM8<br>　　KEY_NUM9<br>　　KEY_STAR<br>　　KEY_POUND<br>　　这些都是按键基本值，当然有些手机是触摸屏的。事件的传递是通过如下方法来实现的。<br>　　<br>　　protected void keyPressed(int keyCode)<br>　　protected void keyReleased(int keyCode)<br>　　protected void keyRepeated(int keyCode)<br>　　protected void pointerPressed(int x, int y)<br>　　protected void pointerDragged(int x, int y)<br>　　protected void pointerReleased(int x, int y)<br>　　protected void showNotify()<br>　　protected void hideNotify()<br>　　protected abstract void paint(Graphics g)<br>　　commandAction() method of the CommandListener interface<br>
开发者应该继承Canvas类的同时覆盖相应的方法来实现低级事件的处理，低级事件的处理是连续的、串行的，在前面的事件返回之前后面的事件不会执行，
当然也有例外，你可以参考API
doc得到答案。下面是一个例子，它的功能就是在屏幕上显示出你按下键的键值，界面非常简单因此没有抓图。代码如下所示：<br>　　<br>　　//LowLevelMIDlet.java<br>　　<br>　　import javax.microedition.lcdui.Display;<br>　　import javax.microedition.midlet.MIDlet;<br>　　import javax.microedition.midlet.MIDletStateChangeException;<br>　　<br>　　/*<br>　　* Created on 2004-6-24<br>　　*<br>　　* TODO To change the template for this generated file go to<br>　　* Window - Preferences - Java - Code Style - Code Templates<br>　　*/<br>　　<br>　　/**<br>　　* @author P2800<br>　　*<br>　　* TODO To change the template for this generated type comment go to Window -<br>　　* Preferences - Java - Code Style - Code Templates<br>　　*/<br>　　public class LowLevelMIDlet extends MIDlet<br>　　{<br>　　<br>　　private Display display;<br>　　private KeyCanvas keyCanvas;<br>　　<br>　　/*<br>　　* (non-Javadoc)<br>　　*<br>　　* @see javax.microedition.midlet.MIDlet#startApp()<br>　　*/<br>　　protected void startApp() throws MIDletStateChangeException<br>　　{<br>　　// TODO Auto-generated method stub<br>　　display = Display.getDisplay(this);<br>　　keyCanvas = new KeyCanvas();<br>　　display.setCurrent(keyCanvas);<br>　　<br>　　}<br>　　<br>　　/*<br>　　* (non-Javadoc)<br>　　*<br>　　* @see javax.microedition.midlet.MIDlet#pauseApp()<br>　　*/<br>　　protected void pauseApp()<br>　　{<br>　　// TODO Auto-generated method stub<br>　　<br>　　}<br>　　<br>　　/*<br>　　* (non-Javadoc)<br>　　*<br>　　* @see javax.microedition.midlet.MIDlet#destroyApp(boolean)<br>　　*/<br>　　protected void destroyApp(boolean arg0) throws MIDletStateChangeException<br>　　{<br>　　// TODO Auto-generated method stub<br>　　<br>　　}<br>　　<br>　　}<br>　　<br>　　//KeyCanvas.java<br>　　<br>　　import javax.microedition.lcdui.Canvas;<br>　　import javax.microedition.lcdui.Command;<br>　　import javax.microedition.lcdui.CommandListener;<br>　　import javax.microedition.lcdui.Displayable;<br>　　import javax.microedition.lcdui.Graphics;<br>　　<br>　　/*<br>　　* Created on 2004-6-25<br>　　*<br>　　* TODO To change the template for this generated file go to<br>　　* Window - Preferences - Java - Code Style - Code Templates<br>　　*/<br>　　<br>　　/**<br>　　* @author P2800<br>　　*<br>　　* TODO To change the template for this generated type comment go to Window -<br>　　* Preferences - Java - Code Style - Code Templates<br>　　*/<br>　　public class KeyCanvas extends Canvas implements CommandListener<br>　　{<br>　　private String key = "Press any key";<br>　　<br>　　/*<br>　　* (non-Javadoc)<br>　　*<br>　　* @see javax.microedition.lcdui.Canvas#paint(javax.microedition.lcdui.Graphics)<br>　　*/<br>　　protected void paint(Graphics g)<br>　　{<br>　　// TODO Auto-generated method stub<br>　　g.setColor(255, 255, 255);<br>　　g.fillRect(0, 0, getWidth(), getHeight());<br>　　g.setColor(0, 0, 0);<br>　　g.drawString(key, getWidth() / 2, getHeight() / 2, Graphics.TOP<br>　　| Graphics.HCENTER);<br>　　<br>　　}<br>　　<br>　　public void keyPressed(int keyCode)<br>　　{<br>　　key = keyCode + " is pressed";<br>　　repaint();<br>　　}<br>　　<br>　　public void keyReleased(int keyCode)<br>　　{<br>　　key = keyCode + " is released";<br>　　repaint();<br>　　}<br>　　<br>　　/*<br>　　* (non-Javadoc)<br>　　*<br>　　* @see javax.microedition.lcdui.CommandListener#commandAction(javax.microedition.lcdui.Command,<br>　　*　　　javax.microedition.lcdui.Displayable)<br>　　*/<br>　　public void commandAction(Command arg0, Displayable arg1)<br>　　{<br>　　// TODO Auto-generated method stub<br>　　<br>　　}<br>　　<br>　　}</div>
<br><font style="color: #050505; font-family: Tahoma,Verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;">
</font>
<br><br><img src ="http://www.blogjava.net/gooogle/aggbug/139663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-08-26 23:32 <a href="http://www.blogjava.net/gooogle/archive/2007/08/26/139663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Pook电子书阅读器板块说明与目的</title><link>http://www.blogjava.net/gooogle/archive/2007/08/24/139026.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Fri, 24 Aug 2007 02:02:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/08/24/139026.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/139026.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/08/24/139026.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/139026.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/139026.html</trackback:ping><description><![CDATA[Pook电子书阅读器板块说明与目的<br><a  href="http://javaeye.5d6d.com/thread-162-1-1.html">原文</a><br><br>
<font size="3">Pook板块说明：<br style="color: Blue;">成立这个专版的意图跟成立Wap Explorer浏览器的意图是一样的，同样是希望可以带动3G视线的发展，并为手机软件爱好者提供一个自由，愉快的学习环境，<br style="color: Blue;">鉴于现在各大论坛无非都是提问，入门等一些例子的论坛，而没有一个完整的项目板块进行讨论，这样相对来说，知识的零散造成了不管是新手，还是老手都没有系统的一个学习环境。<br style="color: Blue;">我们3G论坛就是要打破这个东西。<br><br>Pook项目来源与我一个未完成的开源项目<br><a href="http://javaeye.5d6d.com/thread-65-1-1.html">手机电子书阅读软件基本框架</a><br>这个版本实现的功能有：<br>1.一个相对完整的UI<br>2.读取手机目录的功能<br>3.阅读器的基本框架<br><br style="color: Red;">未完成的功能：<br>1.读取网络数据<br>2.书签<br>3.自定义目录<br>4.读取本机文件<br>5.保存文件<br>6.阅读设置等<br><br>这个专版可以学习到的知识有：<br>1.网络<br>2.低级UI的设计，事件的处理<br>3.读取本机文件jsr的学习<br>4.协议的设计<br><br>协议的设计：<br>提出这个概念是因为，一个电子书，相对来说是有自己的协议的，如果没有自己的一套协议。<br>只是去读取文本文件则相对麻烦很多<br>比如，如果单纯读取文本的话，将很难实现，目录，书签的管理<br>如果有了协议，我们可以做的事情有1.有目录，2.有书签，3，可以插入一些图片，甚至是动画，音乐等。<br><br style="color: Blue;">上面只是一个简单的想法，还需要大家补充<br style="color: Blue;"><br style="color: Blue;">对了这个板块需要招聘版主，有需求的联系我，qq 43686904<br></font>
<br><img src ="http://www.blogjava.net/gooogle/aggbug/139026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-08-24 10:02 <a href="http://www.blogjava.net/gooogle/archive/2007/08/24/139026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Wap Explorer的核心部件 WML解释引擎</title><link>http://www.blogjava.net/gooogle/archive/2007/08/22/138631.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Wed, 22 Aug 2007 07:45:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/08/22/138631.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/138631.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/08/22/138631.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/138631.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/138631.html</trackback:ping><description><![CDATA[原文地址+源代码 <a  href="http://javaeye.5d6d.com/thread-150-1-1.html">http://javaeye.5d6d.com/thread-150-1-1.html</a>
<br><br>Wap Explorer的核心部件 WML解释引擎<br><br>
<font size="3">今天也够郁闷的，论坛一直上不去，不过也好，称这下有时间，把Wap Explorer的核心部件剥离出来，给大家一个思路。<br><br>Wap Explorer的核心部件 WML解释引擎。<br><br style="color: MediumTurquoise;">做Wap的最重要的解释解释引擎了，不管是wml ，html，还是经过服务中转的数据也好，最后来到<br style="color: Blue;">手机客户端的时候都是要经过一个解释引擎，说白了就是手机客户端可以识别的数据。<br style="color: Blue;">据我所知道下面主流的Wap手机浏览器的做法是：<br style="color: Blue;">1. oprea mini 是通过服务器中转的。<br style="color: Blue;">2. UCWeb 也是通过服务中转，不过有一小部分是解释wml的，特别是解释html的是一定要通过服务器中转。<br style="color: Blue;">3. 3GExplorer同上<br style="color: Blue;">4. 航海家，以前主要是解释WML，不过最近新版本好像也是通过服务器中转<br style="color: Blue;">5. Wap Explorer 全部解释wml引擎。<br style="color: Blue;">6. 其他一些非主流的浏览器，基本上也是通过解释wml的，因为他们自己本身没有实力架构服务器吧<br style="color: Blue;"><br style="color: Blue;">下面看看我写的WML解释引擎。下面直接运行WMLParser，我是采用输出文本的形式来解释的，至于解释后生成UI以后再慢<br style="color: Blue;">慢详说。<br style="color: Blue;">需要用到的只是，以及包： kxml<br><br>下面是一段核心代码<br><br>/********************************************************************<br>&nbsp;* 项目名称&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ：&lt;b&gt;j2me学习 J2me Wap Explorer&lt;/b&gt;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;br/&gt;<br>&nbsp;* <br>&nbsp;* Copyright 2005-2006 Wuhua. All rights reserved &lt;/br&gt;<br>&nbsp;*<br>&nbsp;* 本程序只用于学习目的，不能用于商业目的。如有需要请联系作者<br>&nbsp;********************************************************************/<br>package org.fox.wap.parser;<br><br>import java.io.IOException;<br>import java.io.Reader;<br>import java.util.Hashtable;<br><br>import javax.microedition.lcdui.Choice;<br>import javax.microedition.lcdui.Font;<br>import javax.microedition.lcdui.TextField;<br><br>import org.kxml2.io.KXmlParser;<br>import org.xmlpull.v1.XmlPullParser;<br>import org.xmlpull.v1.XmlPullParserException;<br><br>/**<br>&nbsp;* &lt;b&gt;类名：WmlParser.java&lt;/b&gt; &lt;/br&gt; 编写日期: 2006-12-29 &lt;br/&gt; <br>&nbsp;* 程序功能描述：WML的解释器, 采用Kxml解释引擎。&lt;br/&gt;<br>&nbsp;* 解释策略是，解释多少就绘制多少 &lt;br/&gt;<br>&nbsp;* Demo: &lt;br/&gt; Bug: &lt;br/&gt;<br>&nbsp;* <br>&nbsp;* 程序变更日期 ：&lt;br/&gt; 变更作者 ：&lt;br/&gt; 变更说明 ：&lt;br/&gt;<br>&nbsp;* <br>&nbsp;* @author wuhua &lt;/br&gt; &lt;a href="mailto:rrq12345@163.com"&gt;rrq12345@163.com&lt;/a&gt;<br>&nbsp;*/<br>public final class WmlParser implements Parser {<br><br>&nbsp;&nbsp;&nbsp; private Hashtable attr = new Hashtable();<br><br>&nbsp;&nbsp;&nbsp; private String url; //记录当前的URL<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp; &nbsp;* 当前标记,通过当前标记来创建Wap UI.<br>&nbsp;&nbsp;&nbsp; &nbsp;*/<br>&nbsp;&nbsp;&nbsp; private String currentTag;<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp; &nbsp;* 创建当前Align.<br>&nbsp;&nbsp;&nbsp; &nbsp;*/<br>&nbsp;&nbsp;&nbsp; private String align;<br><br>&nbsp;&nbsp;&nbsp; KXmlParser parser;<br><br>&nbsp;&nbsp;&nbsp; private WmlParser(String url) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; parser = new KXmlParser();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.url = url;<br><br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; public static WmlParser getWmlParser(String url) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return new WmlParser(url);<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp; &nbsp;* 解释wml，并生成一系列的Wap GUI部件。 比如遇到&lt;a href="index.wml"&gt;首页&lt;/a&gt; 则对于的生成一个<br>&nbsp;&nbsp;&nbsp; &nbsp;* HyperLink;<br>&nbsp;&nbsp;&nbsp; &nbsp;* <br>&nbsp;&nbsp;&nbsp; &nbsp;* @see WAPGUIFactory.createHyperLink(String text, String url, String algin) ;<br>&nbsp;&nbsp;&nbsp; &nbsp;* @param in --<br>&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过Net获取InputStream, 或者是本地文件解释WML<br>&nbsp;&nbsp;&nbsp; &nbsp;* @return －－ 返回一个Vector集，里面包含了，Wap GUI<br>&nbsp;&nbsp;&nbsp; &nbsp;* @throws XmlPullParserException －－<br>&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解释出错的时候抛出异常<br>&nbsp;&nbsp;&nbsp; &nbsp;* @throws IOException －－<br>&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 读取数据的时候抛出异常<br>&nbsp;&nbsp;&nbsp; &nbsp;*/<br>&nbsp;&nbsp;&nbsp; public final void parser() throws Exception {<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //logger.debug(System.currentTimeMillis());<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int eventType;<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; eventType = parser.getEventType();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; while (eventType != XmlPullParser.END_DOCUMENT) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (eventType == XmlPullParser.START_DOCUMENT) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (eventType == XmlPullParser.END_DOCUMENT) {<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (eventType == XmlPullParser.START_TAG) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; parserStartTagImpl(parser);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (eventType == XmlPullParser.END_TAG) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; parserEndTagImpl();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (eventType == XmlPullParser.TEXT) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; parserTextImpl(parser);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; eventType = parser.next();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Runtime.getRuntime().freeMemory();<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //logger.debug(System.currentTimeMillis());<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // return parts;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; public void setInput(Reader reader) throws XmlPullParserException {<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; parser.setInput(reader);<br><br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; private void parserEndTagImpl() {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String name = parser.getName();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (name.equals(WmlTag.P_TAG) || name.equals(WmlTag.BR_TAG)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; || name.equals(WmlTag.CARD_TAG)) {<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.parserBrImpl();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp; &nbsp;* 此方法是处理各个标记 但是有一个问题，就是会出现两次标记 比如 &lt;a&gt; &lt;/a&gt;的时候就会处理两次br<br>&nbsp;&nbsp;&nbsp; &nbsp;* <br>&nbsp;&nbsp;&nbsp; &nbsp;* @param parser<br>&nbsp;&nbsp;&nbsp; &nbsp;*/<br>&nbsp;&nbsp;&nbsp; private void parserTextImpl(KXmlParser parser) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; parserAlign();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //logger.debug("Tag = " + currentTag + "&nbsp; Text = "<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; + this.parser.getText());<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (currentTag.equals(WmlTag.P_TAG)) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("处理 P Tag ");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //paserStringPart(Style.PLAIN_SMALL, align, true);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (currentTag.equals(WmlTag.A_TAG)) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("处理 A Tag ");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //parserHyperLinkImpl(parser);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (currentTag.equals(WmlTag.BR_TAG)) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("处理 BR Tag ");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //paserStringPart(Style.PLAIN_SMALL, align, true);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (currentTag.equals(WmlTag.CARD_TAG)) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("处理 CARD Tag ");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //parserCardTag(parser);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (currentTag.equals(WmlTag.BIG_TAG)) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("处理 BIG Tag ");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //parserBigTag(parser);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (currentTag.equals(WmlTag.U_TAG)) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("处理 U Tag ");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //parserUTag(parser);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (currentTag.equals(WmlTag.EM_TAG)) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("处理 EM Tag ");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //parserEmTag(parser);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (currentTag.equals(WmlTag.INPUT_TAG)) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("处理 INPUT Tag ");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //parserInputTag();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (currentTag.equals(WmlTag.SELECT_TAG)) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("处理 SELECT Tag ");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //parserSelectTag();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (currentTag.equals(WmlTag.OPTION_TAG)) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("处理 OPTION_TAG ");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //parserOptionTag();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("处理 String 内容 ");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //paserStringPart(Style.PLAIN_SMALL, align, true);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; currentTag = WmlTag.UNKNOW;<br><br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp; &nbsp;* 处理图片显示问题,这里要处理图片的相对路径问题<br>&nbsp;&nbsp;&nbsp; &nbsp;*<br>&nbsp;&nbsp;&nbsp; &nbsp;*/<br>&nbsp;&nbsp;&nbsp; private void parserImgTag() {<br><br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; private void parserOptionTag() {<br><br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp; &nbsp;* 处理Select标记<br>&nbsp;&nbsp;&nbsp; &nbsp;*<br>&nbsp;&nbsp;&nbsp; &nbsp;*/<br>&nbsp;&nbsp;&nbsp; private void parserSelectTag() {<br><br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp; &nbsp;* 处理InputTag<br>&nbsp;&nbsp;&nbsp; &nbsp;*<br>&nbsp;&nbsp;&nbsp; &nbsp;*/<br>&nbsp;&nbsp;&nbsp; private void parserInputTag() {<br><br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; private void parserEmTag() {<br><br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; private void parserUTag() {<br><br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp; &nbsp;* 此方法是绘制，大字体时候用的。<br>&nbsp;&nbsp;&nbsp; &nbsp;* <br>&nbsp;&nbsp;&nbsp; &nbsp;* @param parser<br>&nbsp;&nbsp;&nbsp; &nbsp;*/<br>&nbsp;&nbsp;&nbsp; private void parserBigTag() {<br><br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; private void parserCardTag() {<br><br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp; &nbsp;* 处理&lt;br/&gt;标记 比如: -----&lt;br/&gt; &lt;br/&gt; ------ 则创建StringPart("---------")并且设计换行&lt;br/&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;* 换行的实现是：Part.setNextRow(true);<br>&nbsp;&nbsp;&nbsp; &nbsp;* <br>&nbsp;&nbsp;&nbsp; &nbsp;* @param parser2<br>&nbsp;&nbsp;&nbsp; &nbsp;*/<br>&nbsp;&nbsp;&nbsp; private void parserBrImpl() {<br><br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp; &nbsp;* 处理String的显示 paintMainform();这个必须放在当text，或者是UI存在的时候才可以进行更新<br>&nbsp;&nbsp;&nbsp; &nbsp;* <br>&nbsp;&nbsp;&nbsp; &nbsp;* @param font<br>&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TODO<br>&nbsp;&nbsp;&nbsp; &nbsp;* @param align<br>&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TODO<br>&nbsp;&nbsp;&nbsp; &nbsp;* @param nextRow<br>&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TODO<br>&nbsp;&nbsp;&nbsp; &nbsp;* @param parser2<br>&nbsp;&nbsp;&nbsp; &nbsp;*/<br>&nbsp;&nbsp;&nbsp; private void paserStringPart(Font font, String align, boolean nextRow) {<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; attr.clear();<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp; &nbsp;* 处理HyperLink,并生成HyperLink控件<br>&nbsp;&nbsp;&nbsp; &nbsp;* <br>&nbsp;&nbsp;&nbsp; &nbsp;* @param parser<br>&nbsp;&nbsp;&nbsp; &nbsp;*/<br>&nbsp;&nbsp;&nbsp; private void parserHyperLinkImpl(KXmlParser parser) {<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; attr.clear();<br><br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; private void parserAlign() {<br><br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp; &nbsp;* 解释Wap标记,并把属性保存到attr<br>&nbsp;&nbsp;&nbsp; &nbsp;* <br>&nbsp;&nbsp;&nbsp; &nbsp;* @param parser<br>&nbsp;&nbsp;&nbsp; &nbsp;*/<br>&nbsp;&nbsp;&nbsp; private void parserStartTagImpl(KXmlParser parser) {<br><br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; public Object getResult() {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return null;<br>&nbsp;&nbsp;&nbsp; }<br><br>}<br><br><br style="color: Red;">源代码里面具体可以运行main类，就可以看到结果了<br style="color: Red;">有不明白的地方到这里讨论。<br style="color: Red;"><br></font>
<br><br><img src ="http://www.blogjava.net/gooogle/aggbug/138631.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-08-22 15:45 <a href="http://www.blogjava.net/gooogle/archive/2007/08/22/138631.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第一步： Wap Explorer原始资料整理</title><link>http://www.blogjava.net/gooogle/archive/2007/08/22/138562.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Wed, 22 Aug 2007 03:41:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/08/22/138562.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/138562.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/08/22/138562.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/138562.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/138562.html</trackback:ping><description><![CDATA[最近咨询我浏览器的人太多了，所以我开了个专版，专门讨论手机浏览器的实现<br><br>地址是：<a  href="http://javaeye.5d6d.com/forum-47-1.html">http://javaeye.5d6d.com/forum-47-1.html</a>
<br><br><br>第一步： Wap Explorer原始资料整理<br><br>
<font size="3">这个是我设计这个浏览器的第一步：<br><br>  昨天完成了一个小程序，所以今天有比较空闲了，前阵子自己设计了j2me的UI，所以对在一手机画布上绘制UI也算是比较有心得的。所以今天突发奇想，不如自己定制一个wap浏览器来玩下。<br>
自己以前也做过wap网站，所以也知道它的大概个标签，想来通过xml包解释这些标签不难，现在把我的个人想法发到这里来，希望各位爱好者提供建议。<br>
1：设计一个可组装的UI以提供对xml解释后的支持。（基本上是采用以前的UI设计方式）。<br>
2： 采用网站流行的xml解释包，对wml进行解释，主要构思是采用一个2维表进行数据结构的保存。<br>
3：session机制，这方面是个难度，记得以前设计wap的时，在测试的时候发现有些手机并不支持session。个人想法是在手机上保存一个sessionId，然后发送这个Id，并时刻保持这个Id与服务器的一致。<br>
4：解释机制，是否是一边解释一边显示，还是全部下载完，解释完在显示，在技术上的难度来讲，第一个无疑是比较困难的，但是第二个在用户体验方面存在比较大的缺陷。<br>
5：缓存机制，主要难点是记录用户的操作，以及判断服务器内容是否改变，从而决定是否重新下载，还是直接从缓存中获取。<br><br>
以上几点我只对第一点有把握，第2个估计看下文档就ok了，其他方面我还没有比较多的认识<br><br>第二步：Wap Explorer V1.0 &amp;&amp; 手机开发前景   <br>
哈哈。我的wap浏览器1.0版本的出来了。<br>
解释下功能先<br>
1.调整字体大小<br>
2.调整界面颜色<br>
3.可以定制自己的首页。<br>
4.可以浏览公司很简单的wap页面。<br>
5.其他<br><br>
未实现的功能有：<br>
1，WapPage控制问题，对一些基本的控制未完成。比如数据果多。怎么样浏览才可以实现分页面。<br>
2，解释复杂页面问题。不能解释一些不规则的wap，比较包含特殊符合，或者其他为见果的。wap页面比较要很严谨才可以。<br>
3，一些功能为能实现，比如下载图片，保存图片到本机根保存网页，收藏夹，智能数据收集（比如记录用户的操作习惯，实现相应的规则，再者就是，记录表单数据，用户操作记录等，<br>
4. 数据下载进度条未实现。<br>
5.。还有很多很多。想到再发上来。<br><br>
设计的总体结构是：<br>
自己实现了一个UI。<br>
整体采用MVC结构。具体可参照源代码。我想对其他的j2me应用也是有参考价值的。<br>
联网采用多线程。相信很多用户对于多线程编程印象也是很深刻的。线程怎么样根界面打交道我想也是个很大的学问。我在这个版本的程序中我觉得对这段代码也是有参考价值的。<br>
最后是想讨论下，关于j2me的前途问题。j2me出来的时间也算久了。但对于商业应用来说是比较少的（出了游戏）我见过比较成功的应用级别上都是一些类型QQ聊天程序。想UCWEB则是一个用kjava写的网页客户端，听过挺多人用的。 <br>
像opera公司也出了个mini的wap浏览器，我下载用了下，感觉也很一边，特别是这几天地震把光纤给搞坏了。所以你用mini来上网也是很慢的。我
估计代码了肯定是做了代理服务器，先把用户请求发送到那边的服务器，然后在发送到客户端，这样对于客户端来说。做的工作就少了很多。<br>
不管怎么样都好。对于企业应用来说。并不是想sun官方所期待的那样。现在window mobile发展势头很多。它倡导的是娱乐生活，对于娱乐方面的功能来说。我想现在能出其左右的是没有的。<br>
不过是那个技术，那个体系相对于程序员来说，意义也不大，我们只需要把握好基础的东西。其他的其实也就没什么了。说白了，真是一个工具而已。我们现在不缺少工具，只是缺少灵感，缺少idea。<br>
对于策划一个产品。创新一个产品，有时候我们是想不到这么多的。还真的需要有专门的人来做。他可以不懂技术。他只懂需求就行了。<br>
昨天根市场部的同事去吃饭。发现做市场也是件很辛苦的事情，他要考虑的事情其实比我们做技术的人更多。压力也更大。都说我们拿不到什么钱，其实也是有原因
的。我们只需要按照需求来做。比如我们的技术能力达到了那个层次。如果我们不想活的太累
的话，我们大可不必思考改怎么做，只需要知道这样做就行了。做市场就不同了。他要考虑，我产品做出来有没有收益，还要找技术。我这个产品能不能做。一步步
都要设计好需求，变成他要去了解用户需求，又要了解技术开发者的需求。。。。。。。 <br><br>
哈哈。说了这么多废话。说话正题了。  对于Wap Explorer V1.0，大家可以热烈的讨论。希望爱好手机开发的朋友能多交流。<br>
还有我们放开手脚讨论手机开发的前途j2me也好，mobile也罢，再者就是liunx或者是sysmain等等。能说的都说出来吧。<br><br>
现在暂时不把源代码发布上来，讨论热烈的话，或者迟点再发几个截图上来。根代码。  大家期待吧。。。。。。。。<br><br><br>第三步:
Wap Explorer 图片预览<br><br>前几天说要设计一个Wap浏览器的，经过上个礼拜天的设计，基本已经把UI的框架搭建出来了。不过对于wap的Wml解释器还没写，一来这方面比较难写，没有实践过，二来这几天公司有事情忙。所以就停了下来，不过趁着今天下午有空，我发些设计好的截图给大家看。<br>
在UI里我实现了对字体的控制已经对皮肤（所谓的皮肤只是换换颜色而已）的控制<br>
艾可惜只能发3个附件。
</font>
<div style="border-top: 1px solid gray; margin: 15px 0px 0px 10px; padding: 10px;">
<table class="attach" align="center" border="1" cellpadding="2" cellspacing="0" width="95%">
    <tbody>
        <tr>
            <td colspan="2" class="attachrow" style="background: #d1d7dc none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="center" width="100%"><font size="3"><strong>
            {1E0DF53D-767F-4C53-93F1-74D307C3E874}0.jpg</strong></font></td>
        </tr>
        <tr>
            <td class="attachrow" width="15%"><font size="3"> 描述:</font></td>
            <td class="attachrow" width="75%">
            <br></td>
        </tr>
        <tr>
            <td class="attachrow" width="15%"><font size="3"> 文件大小:</font></td>
            <td class="attachrow" width="75%"><font size="3"> 17 KB</font></td>
        </tr>
        <tr>
            <td class="attachrow" width="15%"><font size="3"> 看过的:</font></td>
            <td class="attachrow" width="75%"><font size="3"> 文件被下载或查看 161 次</font></td>
        </tr>
        <tr>
            <td colspan="2" align="center"><font size="3"><br><a href="http://wuhua.javaeye.com/topics/download/4f2e3b9a-3d5b-422f-bb57-335406a5786e" target="_blank"><img src="http://wuhua.javaeye.com/upload/attachment/pic/3285/95f54f06-7ded-4bd6-9333-2dba791b49a3-thumb.jpg" alt="{1E0DF53D-767F-4C53-93F1-74D307C3E874}0.jpg" border="0"></a>
            <br><a href="http://wuhua.javaeye.com/topics/download/4f2e3b9a-3d5b-422f-bb57-335406a5786e?disposition=attachment"><strong>下载</strong></a>
            <br></font>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div style="border-top: 1px solid gray; margin: 15px 0px 0px 10px; padding: 10px;">
<table class="attach" align="center" border="1" cellpadding="2" cellspacing="0" width="95%">
    <tbody>
        <tr>
            <td colspan="2" class="attachrow" style="background: #d1d7dc none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="center" width="100%"><font size="3"><strong>
            {58DB28A3-11CB-4F4A-B864-B9282BF44468}0.jpg</strong></font></td>
        </tr>
        <tr>
            <td class="attachrow" width="15%"><font size="3"> 描述:</font></td>
            <td class="attachrow" width="75%">
            <br></td>
        </tr>
        <tr>
            <td class="attachrow" width="15%"><font size="3"> 文件大小:</font></td>
            <td class="attachrow" width="75%"><font size="3"> 13 KB</font></td>
        </tr>
        <tr>
            <td class="attachrow" width="15%"><font size="3"> 看过的:</font></td>
            <td class="attachrow" width="75%"><font size="3"> 文件被下载或查看 65 次</font></td>
        </tr>
        <tr>
            <td colspan="2" align="center"><font size="3"><br><a href="http://wuhua.javaeye.com/topics/download/d611e257-dc81-4a6e-bb7f-7cccdc92d47f" target="_blank"><img src="http://wuhua.javaeye.com/upload/attachment/pic/3286/d6d84f7e-52b4-40d2-a9bd-cdf4a934b7d6-thumb.jpg" alt="{58DB28A3-11CB-4F4A-B864-B9282BF44468}0.jpg" border="0"></a>
            <br><a href="http://wuhua.javaeye.com/topics/download/d611e257-dc81-4a6e-bb7f-7cccdc92d47f?disposition=attachment"><strong>下载</strong></a>
            <br></font>
            </td>
        </tr>
    </tbody>
</table>
</div>
<table class="attach" align="center" border="1" cellpadding="2" cellspacing="0" width="95%">
    <tbody>
        <tr>
            <td colspan="2" class="attachrow" style="background: #d1d7dc none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="center" width="100%"><font size="3"><strong>
            {D1C1BED4-7807-4D6A-A6E5-832166EC8ADA}0.jpg</strong></font></td>
        </tr>
        <tr>
            <td class="attachrow" width="15%"><font size="3"> 描述:</font></td>
            <td class="attachrow" width="75%">
            <br></td>
        </tr>
        <tr>
            <td class="attachrow" width="15%"><font size="3"> 文件大小:</font></td>
            <td class="attachrow" width="75%"><font size="3"> 10 KB</font></td>
        </tr>
        <tr>
            <td class="attachrow" width="15%"><font size="3"> 看过的:</font></td>
            <td class="attachrow" width="75%"><font size="3"> 文件被下载或查看 59 次</font></td>
        </tr>
        <tr>
            <td colspan="2" align="center"><font size="3"><br><a href="http://wuhua.javaeye.com/topics/download/91c12319-3fd3-4135-97de-4c90b67be45d" target="_blank"><img src="http://wuhua.javaeye.com/upload/attachment/pic/3287/9d113415-053a-42bf-a519-6d2bf5f3a5b6-thumb.jpg" alt="{D1C1BED4-7807-4D6A-A6E5-832166EC8ADA}0.jpg" border="0"></a>
            <br><a href="http://wuhua.javaeye.com/topics/download/91c12319-3fd3-4135-97de-4c90b67be45d?disposition=attachment"><strong>下载</strong></a></font>
            </td>
        </tr>
    </tbody>
</table>
<font size="3"><br><br>第4步：
Wap Explorer 初步设计源代码<br><strong>字:</strong> J2ME
</font>
<div style="overflow: auto; margin-left: 15px; margin-top: 10px; width: 710px;">
<table width="100%">
    <tbody>
        <tr>
            <td><font size="3">        刚才在我的Q群里面讨论了下关于Wap Explorer的开发。里面的朋友建议我把开发的过程写到blog，以方便学习与讨论。现在我把我写好的代码公布出来。并说明我的设计结构。（在此说明下，对于里面的UI设计我前面写过很多文章）<br>
            一个UI包－－包括了所有的界面实现接口等，Wap的显示也主要是通过这个包里面的东西划出来的。<br>
            里面有两个核心的东西，Part－－控件接口， Panel－－Form接口。<br>
            比如超链接，TextFiel，SoftButton等都是Part， 弹出窗口，FormPanel都是Panel。<br>
            一个Wap引擎。这部分未实现，等大家参考。我参考过jxml等开源的东西，觉得基本上可以实现自己的功能，不过我还是想和大家写一个，一来可以相互学习提高。二来也可以多了解下关于xml（这方面我很菜）。<br><br>
            一个网络连接引擎－－主要是下载数据用的。<br>
            一个RMS包。主要是用来保存用户数据的。<br><br>
            对了。在源代码里之看wuhua包下面的就行了，其他的都是一些网站找来的代码<br><br>
            这里还有个问题是，怎么样可以使Wap引擎跟UI跟网络连接引擎很好的结合呢。<br>
            提出一些参考： <br>
            1，一边下载，一边解释，一边显示（这是最完美的方案，比如firefox就是这样）这样对操作有大量图片资源的时候有很好的体验。我们可以先显示出文字，然后在一边下载图片。<br>
            2，全部下载完在解释，显示（相对与上面的方案来说）这是比较容易的。但是显示会很慢。给用户造成很不好的体验。<br><br>
            还有很多的其他要求。。。。。。。。</font>
            </td>
        </tr>
    </tbody>
</table>
</div>
<font size="3"><br><br></font>
<br><br><img src ="http://www.blogjava.net/gooogle/aggbug/138562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-08-22 11:41 <a href="http://www.blogjava.net/gooogle/archive/2007/08/22/138562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>整理了下MGtalk的源代码</title><link>http://www.blogjava.net/gooogle/archive/2007/08/21/138359.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Tue, 21 Aug 2007 05:58:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/08/21/138359.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/138359.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/08/21/138359.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/138359.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/138359.html</trackback:ping><description><![CDATA[为了让论坛更好的发展，所以我不断努力整理网络上现有的资源，包括一些开源的东西，整理出来，如果能做一些详细的解释就尽量解释，欢迎大家学习，并希望大家也可以为论坛做出贡献，哈哈。<br>想来，我们做无线开发的不就图个3G的到来，可以一展身手吗？不过要是3G真的来了，你准备好了吗？<br>
Gtalk 你听说过吧，而采用J2me设计的Gtalk你听说过吗？<br>come on。<br><br>下面是源代码，我测试了下，发现他并不能链接到google的服务器，有时间，我研究下。发些体会，如果有可能，也想组织下大家开发一个IM工具。<br>特别喜欢这样的感觉
<br><br><a  href="http://javaeye.5d6d.com/thread-143-1-1.html">源代码下载<br></a><br><img src ="http://www.blogjava.net/gooogle/aggbug/138359.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-08-21 13:58 <a href="http://www.blogjava.net/gooogle/archive/2007/08/21/138359.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个经典的J2ME网络读取图片例子</title><link>http://www.blogjava.net/gooogle/archive/2007/08/20/138074.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Mon, 20 Aug 2007 03:37:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/08/20/138074.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/138074.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/08/20/138074.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/138074.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/138074.html</trackback:ping><description><![CDATA[原文发表在<a  href="http://javaeye.5d6d.com/thread-133-1-1.html">http://javaeye.5d6d.com/thread-133-1-1.html</a>
<br><br>一个经典的J2ME网络读取图片例子<br><br>
为了推动本论坛的发展，获取更多的用户，所以小弟今天花了1个小时的时间来构建了一个网站的读取网络图片的例子，<br>里面的知识包括线程，HTTP，画布等<br>线程是为了解决读取网络图片过慢的时候，给用户友好的提示，以增强用户友好度<br>HTTP是从网络读取图片，并把资源转换成可视的图片展示给用户看。<br>画布的意图就更明显了。显示图片，看看代码，先看看图片吧<br>显示提示信息，图片下载中。<br><img src="http://ee.a.5d6d.com/userdirs/9/6/javaeye/attachments/month_0708/20070820_b9faca141002dc3b242eyQTIvX4OOu5b.jpg" onload="attachimg(this, 'load', '点击在新窗口查看全图\nctrl+鼠标滚轮放大或缩小')" onmouseover="attachimginfo(this, 'attach_43', 1);attachimg(this, 'mouseover')" onclick="attachimg(this, 'click', 'http://ee.a.5d6d.com/userdirs/9/6/javaeye/attachments/month_0708/20070820_b9faca141002dc3b242eyqtivx4oou5b.jpg')" onmouseout="attachimginfo(this, 'attach_43', 0, event)" onmousewheel="return imgzoom(this)" alt="" border="0"><img src="http://images.5d6d.com/cusimg/fb/cnvery/OnT4Gs4S/attachimg.gif" border="0"><br><br>下载完毕后的图片<br><img src="http://ee.a.5d6d.com/userdirs/9/6/javaeye/attachments/month_0708/20070820_e249121c60483ba99af0d9nvaLASw6eR.jpg" onload="attachimg(this, 'load', '点击在新窗口查看全图\nctrl+鼠标滚轮放大或缩小')" onmouseover="attachimginfo(this, 'attach_44', 1);attachimg(this, 'mouseover')" onclick="attachimg(this, 'click', 'http://ee.a.5d6d.com/userdirs/9/6/javaeye/attachments/month_0708/20070820_e249121c60483ba99af0d9nvalasw6er.jpg')" onmouseout="attachimginfo(this, 'attach_44', 0, event)" onmousewheel="return imgzoom(this)" alt="" border="0"><img src="http://images.5d6d.com/cusimg/fb/cnvery/OnT4Gs4S/attachimg.gif" border="0"><br><br>下面是源代码拿主要的来说<br>线程读取图片，读取策略是，转换byte为可视的Image，当Image构建出来后，重回画布<br>/********************************************************************<br> * 项目名称                ：&lt;b&gt;j2me学习 J2me Wap Explorer&lt;/b&gt;            &lt;br/&gt;<br> * <br> * Copyright 2005-2006 Wuhua. All rights reserved &lt;/br&gt;<br> *<br> * 本程序只用于学习目的，不能用于商业目的。如有需要请联系作者<br> ********************************************************************/<br>package org.fox.image;<br><br>import java.io.ByteArrayOutputStream;<br>import java.io.IOException;<br>import java.io.InputStream;<br><br>import javax.microedition.io.Connector;<br>import javax.microedition.io.HttpConnection;<br>import javax.microedition.lcdui.Image;<br><br>/**<br> * &lt;b&gt;类名：ImageHandler.java&lt;/b&gt; &lt;/br&gt; 编写日期: 2007-8-17 &lt;br/&gt; 程序功能描述： &lt;br/&gt; Demo:<br> * &lt;br/&gt; Bug: &lt;br/&gt;<br> * <br> * 程序变更日期 ：&lt;br/&gt; 变更作者 ：&lt;br/&gt; 变更说明 ：&lt;br/&gt;<br> * <br> * @author wuhua &lt;/br&gt; &lt;a href="mailto:rrq12345@163.com"&gt;rrq12345@163.com&lt;/a&gt;<br> */<br>public class ImageHandler implements Runnable {<br>    <br> <br>    private HttpConnection c = null;<br>    private InputStream is = null;<br>    private ByteArrayOutputStream baos = new ByteArrayOutputStream();<br>    private Image image = null;<br>    private String iamgeUrl;<br>    private ImageCanvas imageCanvas;<br>    private ImagePart imagePart;<br>    <br>    private ImageHandler(String imageUrl,ImagePart imagePart,ImageCanvas imageCanvas){<br>        this.iamgeUrl = imageUrl;<br>        this.imagePart = (ImagePart)imagePart;<br>        this.imageCanvas = imageCanvas;<br>        new Thread(this).start();<br>    }<br>    <br>    public static ImageHandler getIamgeHandler(String imageUrl, <br>            ImagePart imagePart,ImageCanvas imageCanvas){<br>        return new ImageHandler(imageUrl,imagePart,imageCanvas);<br>    }<br>    /* 获得网络图片 */<br>    public   Image handlerIamge() throws Exception{    <br>        byte[] imageData = null;<br>        try {<br>            c = (HttpConnection) Connector.open(iamgeUrl);<br>            is = c.openInputStream();<br><br>            int ch = 0;<br>            while ((ch = is.read()) != -1) {<br>                baos.write(ch); // 读取网络图片<br>            }<br>        } catch (IOException ioe) {<br>            throw new IOException("Connect Error");<br>        }<br><br>        imageData = baos.toByteArray(); // 把图片转换成字节<br>        try {<br>            image = Image.createImage(imageData, 0, imageData.length);<br>        } catch (NullPointerException e) {<br>            throw new NullPointerException("NullPointerException");<br>        } catch (IllegalArgumentException e) {<br>            throw new IllegalArgumentException("IllegalArgumentException");<br>        }<br><br>        return image;<br>    }<br><br>    public void run() {      <br>            try {<br>                imagePart.setImage(handlerIamge());            <br>                imageCanvas.repaint();<br>            } catch (Exception e) {<br>                e.printStackTrace();<br>            }<br>         <br>    }<br>}<br><br>最主要的就是这个类了，其他都是一些辅助的，具体可以参考源代码。<br><br>我这个工程是在Eclipse + EclipseMe开发的。<br><br>源代码在原文里面。<br><br>
<br><br><img src ="http://www.blogjava.net/gooogle/aggbug/138074.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-08-20 11:37 <a href="http://www.blogjava.net/gooogle/archive/2007/08/20/138074.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SMSLottery--一个打算博彩的短信项目</title><link>http://www.blogjava.net/gooogle/archive/2007/08/17/137464.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Fri, 17 Aug 2007 01:45:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/08/17/137464.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/137464.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/08/17/137464.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/137464.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/137464.html</trackback:ping><description><![CDATA[SMSLottery--一个打算博彩的短信项目<br>原文出处：<a  href="http://javaeye.5d6d.com/thread-114-1-1.html">http://javaeye.5d6d.com/thread-114-1-1.html</a>
<br><br>
<div id="message131" class="t_msgfont">前段时间，有一个好朋友托我帮他开发一个很简单的博彩项目，他说先做个简单能实现功能的项目给他，然后他拿给他客户，并视图说服他合作。那段时间公司特别忙，没办法，为了不让朋友失望就在礼拜6的时候帮他搞了一个，后来由于种种原因，好像就没了下文。<br>我看就把项目贡献出来供大家学习之用，看看完成一个项目到底需要做些什么准备吧，希望高手指导。<br><img src="http://ee.a.5d6d.com/userdirs/9/6/javaeye/attachments/month_0708/20070816_b5a8edd6080a8a6c06adjy4KlNCxV2cA.jpg" onload="attachimg(this, 'load', '点击在新窗口查看全图\nctrl+鼠标滚轮放大或缩小')" onmouseover="attachimginfo(this, 'attach_33', 1);attachimg(this, 'mouseover')" onclick="attachimg(this, 'click', 'http://ee.a.5d6d.com/userdirs/9/6/javaeye/attachments/month_0708/20070816_b5a8edd6080a8a6c06adjy4klncxv2ca.jpg')" onmouseout="attachimginfo(this, 'attach_33', 0, event)" onmousewheel="return imgzoom(this)" alt="" border="0"><img src="http://images.5d6d.com/orig/default/attachimg.gif" border="0"><br>
<div title="menu" class="t_attach" id="attach_33_menu" style="display: none;"><img src="http://images.5d6d.com/orig/attachicons/image.gif" class="absmiddle" alt="" border="0"> <a href="http://javaeye.5d6d.com/attachment.php?aid=33&amp;nothumb=yes" target="_blank" class="bold">278663.jpg.JPG</a> (12.18 KB)<br>
<div class="right smalltxt">2007-8-16 16:09</div>
</div>
</div>
<br><font style="color: #333333; font-family: Tahoma,Verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;">
<br><br>
<div class="msgbody">
<div class="msgheader">
<div class="right"><a href="http://javaeye.5d6d.com/member.php?action=credits&amp;view=getattach" target="_blank"><img src="http://images.5d6d.com/orig/default/credits_attachlist.gif" alt="查看积分策略说明" border="0"></a></div>
附件</div>
<div class="msgborder" style="border-bottom: 0px none; padding: 0px;">
<div class="t_attachlist">
<div class="right smalltxt">2007-8-16 16:14<br>
&nbsp;&nbsp;下载次数: 3</div>
<img src="http://images.5d6d.com/orig/attachicons/rar.gif" class="absmiddle" alt="" border="0"> <a href="http://javaeye.5d6d.com/attachment.php?aid=34" class="bold" target="_blank">src.rar</a> (3.98 KB)
<br>
&nbsp;
</div>
</div>
</div>
</font>
<br><br><br><img src="http://images.5d6d.com/orig/common/sigline.gif" alt=""><br>
<div class="t_signature" style="overflow: hidden; max-height: 20em;">适中关注J2ME</div>
<br><img src ="http://www.blogjava.net/gooogle/aggbug/137464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-08-17 09:45 <a href="http://www.blogjava.net/gooogle/archive/2007/08/17/137464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>短信发送机的实现</title><link>http://www.blogjava.net/gooogle/archive/2007/05/25/120094.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Fri, 25 May 2007 13:32:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/05/25/120094.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/120094.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/05/25/120094.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/120094.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/120094.html</trackback:ping><description><![CDATA[这几天由于公司的需要，见到有些同事用手机刷卡，觉得很痛苦。<br>
今天早上回来就产生了一个想法，不如用j2me实现一个短信发送机的程序，然后只需要填入几个数字就可以实现短信的自动发送等。<br>
经过大概2个小时的奋斗，终于写好了，并且在多部不同品牌的机器运行良好，而且很实用，不过可以有些手机需要数字签名，否则的话，会不停的提示你。郁闷，不过索爱跟三星就可以设置。<br>
现在公布源代码跟按照文件<br>
先让大家看个图<br>&#160; <br>
<br>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<ol start="1" class="dp-j">
    <li class="alt">/******************************************************************** </li>
    <li class=""> * 项目名称             ：<strong>j2me学习</strong>          <br> </li>
    <li class="alt"> *  </li>
    <li class=""> * Copyright 2005-2006 Wuhua. All rights reserved </li>
    <li class="alt"> ********************************************************************/  </li>
    <li class="">package org.fox.sms;  </li>
    <li class="alt">  <br>
    </li>
    <li class="">import java.io.IOException;  </li>
    <li class="alt">  <br>
    </li>
    <li class="">import javax.microedition.io.Connector;  </li>
    <li class="alt">import javax.microedition.lcdui.Command;  </li>
    <li class="">import javax.microedition.lcdui.CommandListener;  </li>
    <li class="alt">import javax.microedition.lcdui.Displayable;  </li>
    <li class="">import javax.microedition.lcdui.Form;  </li>
    <li class="alt">import javax.microedition.lcdui.TextField;  </li>
    <li class="">import javax.wireless.messaging.MessageConnection;  </li>
    <li class="alt">import javax.wireless.messaging.TextMessage;  </li>
    <li class="">  <br>
    </li>
    <li class="alt">/** </li>
    <li class=""> * <strong>类名：SMSForm.java</strong> <br>  </li>
    <li class="alt"> * 编写日期: 2007-5-25 <br> </li>
    <li class=""> * 程序功能描述： <br> </li>
    <li class="alt"> * Demo: <br> </li>
    <li class=""> * Bug: <br> </li>
    <li class="alt"> *  </li>
    <li class=""> * 程序变更日期 ：<br>  </li>
    <li class="alt"> * 变更作者 ：<br>  </li>
    <li class=""> * 变更说明 ：<br> </li>
    <li class="alt"> *  </li>
    <li class=""> * @author wuhua <br> <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#47;&#47;&#114;&#114;&#113;&#49;&#50;&#51;&#52;&#53;&#64;&#49;&#54;&#51;&#46;&#99;&#111;&#109;&#47;" _fcksavedurl="mailto:rrq12345@163.com">rrq12345@163.com</a> </li>
    <li class="alt"> */  </li>
    <li class="">public class SMSForm extends Form  </li>
    <li class="alt">implements CommandListener, Runnable{  </li>
    <li class="">      <br>
    </li>
    <li class="alt">      Command send = new Command("发送", Command.OK, 1);  </li>
    <li class="">      Command back = new Command("返回", Command.BACK, Command.BACK);  </li>
    <li class="alt">      TextField phone;   </li>
    <li class="">      TextField content;  </li>
    <li class="alt">      TextField num;  </li>
    <li class="">      TextField timeOut;  </li>
    <li class="alt">      TextField  text;  </li>
    <li class="">      String serverPort = "5000";// getAppProperty("serverPort");  </li>
    <li class="alt">      int sms;  </li>
    <li class="">        <br>
    </li>
    <li class="alt">      Menu menu;  </li>
    <li class="">    public SMSForm(Menu m) {  </li>
    <li class="alt">        super("短信发送机");  </li>
    <li class="">  <br>
    </li>
    <li class="alt">        setCommandListener(this);  </li>
    <li class="">        text = new TextField("状态", "等待发送短信", 20, TextField.ANY);  </li>
    <li class="alt">        phone = new TextField("号码", "XXXX:", 20, TextField.NUMERIC);  </li>
    <li class="">        content = new TextField("指令", "777", 10, TextField.NUMERIC);  </li>
    <li class="alt">        num = new TextField("条数", "23", 10, TextField.NUMERIC);  </li>
    <li class="">        timeOut = new TextField("时间格", "10", 10, TextField.NUMERIC);  </li>
    <li class="alt">        this.append(phone);  </li>
    <li class="">        this.append(content);  </li>
    <li class="alt">        this.append(num);  </li>
    <li class="">        this.append(timeOut);  </li>
    <li class="alt">        this.append(text);  </li>
    <li class="">        this.addCommand(send);  </li>
    <li class="alt">        this.addCommand(back);  </li>
    <li class="">        this.menu = m;  </li>
    <li class="alt">          <br>
    </li>
    <li class="">    }  </li>
    <li class="alt">  <br>
    </li>
    <li class="">    public void commandAction(Command c, Displayable arg1) {  </li>
    <li class="alt">         if(c == send){  </li>
    <li class="">             new Thread(this).start();  </li>
    <li class="alt">             this.removeCommand(send);  </li>
    <li class="">         }else{  </li>
    <li class="alt">            SMSSenderMIDlet.display.setCurrent(menu);  </li>
    <li class="">         }  </li>
    <li class="alt">          <br>
    </li>
    <li class="">    }  </li>
    <li class="alt">  <br>
    </li>
    <li class="">    public void run() {  </li>
    <li class="alt">        int num = Integer.parseInt(this.num.getString());  </li>
    <li class="">        int sleep = Integer.parseInt(this.timeOut.getString());  </li>
    <li class="alt">        while(true){  </li>
    <li class="">            //System.out.println(sleep);  </li>
    <li class="alt">            if(sms &lt; num){  </li>
    <li class="">                senderImpl();  </li>
    <li class="alt">            }  </li>
    <li class="">            else{  </li>
    <li class="alt">                   <br>
    </li>
    <li class="">                SMSSenderMIDlet.display.setCurrent(menu);  </li>
    <li class="alt">                break;  </li>
    <li class="">            }  </li>
    <li class="alt">            try {  </li>
    <li class="">                //System.out.println(sleep);  </li>
    <li class="alt">                Thread.sleep(sleep*1000);  </li>
    <li class="">                //System.out.println(sleep);  </li>
    <li class="alt">            } catch (InterruptedException e) {  </li>
    <li class="">                e.printStackTrace();  </li>
    <li class="alt">            }  </li>
    <li class="">                  <br>
    </li>
    <li class="alt">        }  </li>
    <li class="">          <br>
    </li>
    <li class="alt">  <br>
    </li>
    <li class="">    }  </li>
    <li class="alt">  <br>
    </li>
    <li class="">    private void senderImpl() {  </li>
    <li class="alt">        String addr = "sms://" + phone.getString();  </li>
    <li class="">        System.out.println("发送地址为:" + addr);  </li>
    <li class="alt">        MessageConnection conn;  </li>
    <li class="">        try {  </li>
    <li class="alt">            conn = (MessageConnection) Connector.open(addr);  </li>
    <li class="">            TextMessage msg = (TextMessage) conn  </li>
    <li class="alt">                    .newMessage(MessageConnection.TEXT_MESSAGE);  </li>
    <li class="">            msg.setPayloadText(content.getString());  </li>
    <li class="alt">            conn.send(msg);  </li>
    <li class="">            conn.close();  </li>
    <li class="alt">            sms++;  </li>
    <li class="">            //text = sms+"";  </li>
    <li class="alt">            text.setString("成功发送" +this.num.getString() + "第" + sms + "条");  </li>
    <li class="">               <br>
    </li>
    <li class="alt">        } catch (IOException e) {  </li>
    <li class="">            // TODO 自动生成 catch 块  </li>
    <li class="alt">            e.printStackTrace();  </li>
    <li class="">        }  </li>
    <li class="alt">    }  </li>
    <li class="">  <br>
    </li>
    <li class="alt">}  </li>
    <li class="">  <br>
    </li>
    <li class="alt">  <br>
    </li>
    <li class="">  <br>
    </li>
    <li class="alt">/******************************************************************** </li>
    <li class=""> * 项目名称             ：<strong>j2me学习</strong>          <br> </li>
    <li class="alt"> *  </li>
    <li class=""> * Copyright 2005-2006 Wuhua. All rights reserved </li>
    <li class="alt"> ********************************************************************/  </li>
    <li class="">package org.fox.sms;  </li>
    <li class="alt">  <br>
    </li>
    <li class="">import javax.microedition.lcdui.Command;  </li>
    <li class="alt">import javax.microedition.lcdui.CommandListener;  </li>
    <li class="">import javax.microedition.lcdui.Displayable;  </li>
    <li class="alt">import javax.microedition.lcdui.List;  </li>
    <li class="">  <br>
    </li>
    <li class="alt">/** </li>
    <li class=""> * <strong>类名：Menu.java</strong> <br>  </li>
    <li class="alt"> * 编写日期: 2007-5-25 <br> </li>
    <li class=""> * 程序功能描述： <br> </li>
    <li class="alt"> * Demo: <br> </li>
    <li class=""> * Bug: <br> </li>
    <li class="alt"> *  </li>
    <li class=""> * 程序变更日期 ：<br>  </li>
    <li class="alt"> * 变更作者 ：<br>  </li>
    <li class=""> * 变更说明 ：<br> </li>
    <li class="alt"> *  </li>
    <li class=""> * @author wuhua <br> <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#47;&#47;&#114;&#114;&#113;&#49;&#50;&#51;&#52;&#53;&#64;&#49;&#54;&#51;&#46;&#99;&#111;&#109;&#47;" _fcksavedurl="mailto:rrq12345@163.com">rrq12345@163.com</a> </li>
    <li class="alt"> */  </li>
    <li class="">public class Menu extends List implements CommandListener{  </li>
    <li class="alt">      <br>
    </li>
    <li class="">      Command send = new Command("打开发送机", Command.OK, 1);  </li>
    <li class="alt">    public Menu(String title, int listType) {  </li>
    <li class="">        super(title, listType);  </li>
    <li class="alt">           <br>
    </li>
    <li class="">        this.append("打开发送机", null);  </li>
    <li class="alt">        this.addCommand(send);  </li>
    <li class="">        this.setCommandListener(this);  </li>
    <li class="alt">    }  </li>
    <li class="">  <br>
    </li>
    <li class="alt">    public void commandAction(Command c, Displayable d) {  </li>
    <li class="">        System.out.println("dfsdfsd");  </li>
    <li class="alt">        if(c == send){  </li>
    <li class="">            SMSSenderMIDlet.display.setCurrent(new SMSForm(this));  </li>
    <li class="alt">        }else{  </li>
    <li class="">              <br>
    </li>
    <li class="alt">        }  </li>
    <li class="">    }  </li>
    <li class="alt">  <br>
    </li>
    <li class="">}  </li>
    <li class="alt">  <br>
    </li>
    <li class="">  <br>
    </li>
    <li class="alt">/******************************************************************** </li>
    <li class=""> * 项目名称             ：<strong>j2me学习</strong>          <br> </li>
    <li class="alt"> *  </li>
    <li class=""> * Copyright 2005-2006 Wuhua. All rights reserved </li>
    <li class="alt"> ********************************************************************/  </li>
    <li class="">package org.fox.sms;  </li>
    <li class="alt">  <br>
    </li>
    <li class="">import java.io.IOException;  </li>
    <li class="alt">  <br>
    </li>
    <li class="">import javax.microedition.io.Connector;  </li>
    <li class="alt">import javax.microedition.lcdui.Choice;  </li>
    <li class="">import javax.microedition.lcdui.Display;  </li>
    <li class="alt">import javax.microedition.midlet.MIDlet;  </li>
    <li class="">import javax.microedition.midlet.MIDletStateChangeException;  </li>
    <li class="alt">import javax.wireless.messaging.MessageConnection;  </li>
    <li class="">  <br>
    </li>
    <li class="alt">/** </li>
    <li class=""> * <strong>类名：SMSSenderMIDlet.java</strong> <br>  </li>
    <li class="alt"> * 编写日期: 2007-5-25 <br> </li>
    <li class=""> * 程序功能描述： <br> </li>
    <li class="alt"> * Demo: <br> </li>
    <li class=""> * Bug: <br> </li>
    <li class="alt"> *  </li>
    <li class=""> * 程序变更日期 ：<br>  </li>
    <li class="alt"> * 变更作者 ：<br>  </li>
    <li class=""> * 变更说明 ：<br> </li>
    <li class="alt"> *  </li>
    <li class=""> * @author wuhua <br> <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#47;&#47;&#114;&#114;&#113;&#49;&#50;&#51;&#52;&#53;&#64;&#49;&#54;&#51;&#46;&#99;&#111;&#109;&#47;" _fcksavedurl="mailto:rrq12345@163.com">rrq12345@163.com</a> </li>
    <li class="alt"> */  </li>
    <li class="">public class SMSSenderMIDlet extends MIDlet {  </li>
    <li class="alt">      private MessageConnection sconn;  </li>
    <li class="">        <br>
    </li>
    <li class="alt">      public static Display display;  </li>
    <li class="">    public SMSSenderMIDlet() {  </li>
    <li class="alt">          <br>
    </li>
    <li class="">          <br>
    </li>
    <li class="alt">    }  </li>
    <li class="">  <br>
    </li>
    <li class="alt">    protected void destroyApp(boolean arg0) throws MIDletStateChangeException {  </li>
    <li class="">        try {  </li>
    <li class="alt">            sconn.close();  </li>
    <li class="">        } catch (IOException e) {  </li>
    <li class="alt">            // TODO 自动生成 catch 块  </li>
    <li class="">            e.printStackTrace();  </li>
    <li class="alt">        }  </li>
    <li class="">  <br>
    </li>
    <li class="alt">    }  </li>
    <li class="">  <br>
    </li>
    <li class="alt">    protected void pauseApp() {  </li>
    <li class="">       <br>
    </li>
    <li class="alt">  <br>
    </li>
    <li class="">    }  </li>
    <li class="alt">  <br>
    </li>
    <li class="">    protected void startApp() throws MIDletStateChangeException {  </li>
    <li class="alt">        String serverPort = "5000";  </li>
    <li class="">        try {  </li>
    <li class="alt">            sconn = (MessageConnection) Connector.open("sms://:" + serverPort);  </li>
    <li class="">        } catch (IOException e) {  </li>
    <li class="alt">               <br>
    </li>
    <li class="">            e.printStackTrace();  </li>
    <li class="alt">        }  </li>
    <li class="">          <br>
    </li>
    <li class="alt">         Menu m = new Menu("短信发送机",Choice.IMPLICIT);  </li>
    <li class="">        display = Display.getDisplay(this);  </li>
    <li class="alt">        display.setCurrent(m);  </li>
    <li class="">  <br>
    </li>
    <li class="alt">    }  </li>
    <li class="">  <br>
    </li>
    <li class="alt">}  </li>
</ol>
</div>
<br>
<br><img src ="http://www.blogjava.net/gooogle/aggbug/120094.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-05-25 21:32 <a href="http://www.blogjava.net/gooogle/archive/2007/05/25/120094.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重构Wap Explorer 使之可以成为一个商业产品？</title><link>http://www.blogjava.net/gooogle/archive/2007/05/23/119298.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Wed, 23 May 2007 00:58:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/05/23/119298.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/119298.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/05/23/119298.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/119298.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/119298.html</trackback:ping><description><![CDATA[<h1><font color="#800000">项目的由来</font></h1>
<p><font color="#800000">去年10月份左右，个人开发了一个足球即时软件，在此构建的一个ui，加上一些解释wml的一些项目，决定把两者组合起来，开发一可用的浏览器，--- 这就是最此的想法。</font></p>
<p><font color="#800000">经过大概一个月左右时间实现了下，然后发布出来，但这个浏览器还不是一个可用的东西。</font></p>
<font color="#800000">这个就是为什么有这个开发日志的由来，我想再接下来的时间里，对它进行二次开发，进行重构。</font><br> <br> 这篇文章开始的名字是：<br> <font color="#808000">重温Wap Explorer之主页从wml构建</font><br> 想来没碰j2me也有好几个月了，很是想念它，所以就动用了这几天的时间来重新构建一个主页出来，以前Wap Explorer的主页完全是构建一个class,然后在这个class里面添加那些控件显示出来的，<br> 这几天我也不停的重构wml解释引擎，跟wap UI部件，昨天终于把主页重构完毕，发个帖出来，让大家欣赏下。也算是报答各个网友的关心。<br> <br> 现在我把文章的名字变了下，改成<font color="#ff0000">重构Wap Explorer 使之可以成为一个商业产品？，之所以加个？号，是因为一个成熟的商业产品并不是想像的那么简单。<br> 不过有一点是可以肯定的，那就是每天不断的重构，久了，一些东西就会显现出来，很多不明朗跟不明白的东西都会跑出来，这是一件很有趣的事情。<br> 以后我会以开发日志的形式更新这个帖子，以后的日志就不写到这里了，直接跟帖，有兴趣的朋友可以在这里讨论，砸砖。<br> 我很希望看到这样的情况发生<br> </font> 先看看图片，<br> 然后再看看那些主页跟帮助的wml
<br>
<p><span style="color: red;">项目开发日志 </span><br>5月23日， <br>1．	昨天运行软件的时候，发现出现了很多问题，1，wml解释慢了点，2，打开一些异常的url会出现程序崩溃，3，软件运行久了就会出现内存溢出。 <br>2．	今天重点解决的是wml解释引擎优化，网络下载优化等 <br>3．	恩。 <br>对了。你有没有研究http下载速度问题 <br>比如你获取input然后，读取长度，然后在对长度进行分割，同时启动线程对那些分割进行下载，这样速度会快很多  <br>4．	不过如果设计的好的话，同时启动2个线程去读取数据到是可以的，特别是读取图片的时候，一定要同时开启2个线程去读取，不然的话，慢啊 <br>5．	关闭所有日志输出可以快很多。比如我打开日志输出输掉是解释一个比较大的wml是2秒，关闭的话0.8秒左右（不过这个日志的输出，量比较大） <br>6．	在采用kxml解释引擎的时候，发现kxml下载网络数据的时候，会丢失数据包，所以解释的时候，wml变了形状，甚至是出现异常情况，导致程序崩溃，所以今天要解决的问题是自己实现下载机制，并采用多线程的技术进行下载。 <br>7．	</p>
<p>5月22日， <br>8．	今天重点重构一个下载进度条，但是这个下载进度条要人性化一点。怎么做了，上网去找下有没有这方面的资料 <br>9．	下载进度条搞定，不过，很可惜，设计的不怎么好看。这个问题也解决了，进度条也好看多了 <br>  <br>10．	开始设计Cokie跟缓存功能，设计初期就遇到了困难，出现cache死锁问题。 <br>超链接支持打电话的功能了 <br>5月21日， <br>11．	继续修正了一些bug，给字体的标签进行解释。 <br>12．	今天给字体加了个解释颜色的功能，比如标记&lt;big color=&#8221;fff&#8221;&gt;Fox&lt;/big&gt;就可以实现不同样式的字体了。哈 <br>13．	实现了一个打电话的功能，发短信，发彩信的功能 <br>14．	写了一个help的wml跟main.wml哈哈，我可以成功的解释这些wml， <br>15．	还没实现的功能有input，selectOption跟img等标记 <br>16．	重构了一个关于退出事件的方式，决定采用时间链的形式，给一个class传入一个事件代码 <br>17．	超链接支持打电话的功能了</p>
<p>5月20日， <br>18．	今天重构了WapPage的设计，虽然主页不够完美，比如有些标记支持的不好，但是这个是kxml解释引擎的事情，还有一个解决了问题是可以支持，用户查看状态的问题了，还差一个下载状态的UI，不过应该很简单。 <br>19．	重构了MainPage的设计，设计成从wml文件中读取数据然后显示出来 <br>20．	整天想这些东西真的很烦恼 <br>5月19日， <br>1．	今天是礼拜6，我很开心，昨天晚上回到家，搞定了WapPage的一些重构，不过还差很多，比如关于浏览下拉页面的时候，一个状态条表示，用户的动作，下载进度条。等等，今天重点是重构下下来进度状态跟用户事件的完善。 <br>2．	继前几天搞定Kxml解释wap出错的bug后，昨天晚上有对kxml解释引擎进行了 <br>的重构，使之能解释更多的wml标记，并绘制出来。 <br>3．	今天修改了日志输出方式。这样更易于调试。 <br>4．
今天下午陪女朋友去逛了下街，广州今天下雨，回来把一些想好了，但确未能实践的做了下，感觉还不错，WapPage重构的差不多了，Kxml解释引擎也差
不多了。现在忙于下载那些wml文件进行本地调试，还出差一个下载进度条，本想做一个ajax常用的进度的，不过苦于没有gif图片分割，而我又对gif
不熟悉。哈 <br>5．	功能修正了许多。 <br>5月18日， <br>6．	今天的任务是重点重构UI，要求是，每个UI都能记住自己的位置 <br>7．	重点重构WapPage这个UI，使之可以管理其他UI部件 <br>5月16日， <br>1．	发现了kxml解释引擎在解释wml时候的一个bug，详细看源代码 <br>2．	重构了StringPart UI组件，使之可以自动换行。这个功能已经重构完毕 <br>3．	重构WapPage部件，这个部件很关键，是把所有的Part UI组装起来，所以说这个部件也是所有Part UI的Manage，设计的好，可以很容易做好统一管理，事件处理，资源释放跟绘制管理等 <br>4．	发现了一个很严重的bug，为什么我用kxml解释wml的时候，会对一个tag重复的解释两次呢。找到问题的所在了，这个并不是kxml的bug，而是自己的疏忽，把函数放错了位置。现在问题解决了 </p>
<br>
<a href="http://wuhua.javaeye.com/upload/picture/pic/3442/2dc29b52-460c-474c-af05-a7e0f0fabada.jpg"><img src="http://wuhua.javaeye.com/upload/picture/pic/3442/2dc29b52-460c-474c-af05-a7e0f0fabada.jpg" alt=""><img src="http://wuhua.javaeye.com/upload/picture/pic/3456/b7ef2d33-6e7a-48cc-84c3-5b8836fbff09.jpg" alt=""><img src="http://wuhua.javaeye.com/upload/picture/pic/3439/aa5005d0-86e5-4699-9556-50316d593fc4.jpg" alt=""><img src="http://wuhua.javaeye.com/upload/picture/pic/3443/cd189211-c86e-42cd-a7ce-fdc21d7bc857.jpg" alt=""><img src="http://wuhua.javaeye.com/upload/picture/pic/3438/98782920-6851-400c-ae01-73585d3cd4dd.jpg" alt=""></a><br>
<br>
<img src="http://wuhua.javaeye.com/upload/picture/pic/3437/bbf969c5-00db-4da2-bdaf-86f65ca92852.jpg" alt=""><br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
Wml代码：<br>
<div class="code_title">主页xml 代码</div>
<div class="dp-highlighter">
<div class="bar"> </div>
<ol class="dp-xml" start="1">
    <li class="alt">xml version="1.0"?&gt;  </li>
    <li class="">&gt;  </li>
    <li class="alt">&lt;wml&gt;  </li>
    <li class="">&lt;card id="index" title="饶荣庆"&gt;  </li>
    <li class="alt">&lt;p align="center"&gt;&lt;BIG color="d4df"&gt;爬虫工作室&lt;!--&lt;/span--&gt;BIG&gt;&lt;!--&lt;/span--&gt;p&gt;  </li>
    <li class="">   <br></li>
    <li class="">&lt;p align="center"&gt;&lt;a href="http://wap.3g.net.cn/"&gt; 3g &lt;!--&lt;/span--&gt;a&gt;&lt;!--&lt;/span--&gt;p&gt;  </li>
    <li class="alt">&lt;p align="center"&gt;&lt;a href="http://wap.wapcn.net/"&gt; [WAP中国]&lt;!--&lt;/span--&gt;a&gt;&lt;!--&lt;/span--&gt;p&gt;  </li>
    <li class="">&lt;p align="center"&gt;&lt;a href="http://wap.kongzhong.com"&gt; 空中网&lt;!--&lt;/span--&gt;a&gt;&lt;!--&lt;/span--&gt;p&gt;  </li>
    <li class="alt">&lt;p align="center"&gt;&lt;a href="http://wap.dwap.cn/"&gt;Wap帝国&lt;!--&lt;/span--&gt;a&gt;&lt;!--&lt;/span--&gt;p&gt;  </li>
    <li class="">&lt;p align="center"&gt;&lt;a href="http://wap.bazhang.com"&gt; 巴掌&lt;!--&lt;/span--&gt;a&gt;&lt;!--&lt;/span--&gt;p&gt;  </li>
    <li class="alt">   <br></li>
    <li class="">  <br></li>
    <li class="alt">此浏览器是我个人一个比较完整的作品，&lt;br/&gt;  </li>
    <li class="">为此我花了很多心血啊，主要是用来交流之用，&lt;br/&gt;  </li>
    <li class="alt">需要交流的朋友跟我联系，&lt;br/&gt;  </li>
    <li class="">我的qq是43686904 &lt;br/&gt;  </li>
    <li class="alt">还有很多需要完善的地方&lt;br/&gt;  </li>
    <li class="">  <br></li>
    <li class="alt">&lt;a href="local://help.wml"&gt;》帮助&lt;!--&lt;/span--&gt;a&gt;  </li>
    <li class="">&lt;!--&lt;/span--&gt;card&gt; &lt;!--&lt;/span--&gt;wml&gt;  </li>
</ol>
</div>
<br>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"> </div>
<ol class="dp-xml" start="1">
    <li class="alt">xml version="1.0"?&gt;  </li>
    <li class="">&gt;  </li>
    <li class="alt">&lt;wml&gt;  </li>
    <li class="">&lt;card id="index" title="帮助"&gt;  </li>
    <li class="alt">&lt;p align="center"&gt;&lt;BIG color="d4df"&gt;帮助&lt;!--&lt;/span--&gt;BIG&gt;&lt;!--&lt;/span--&gt;p&gt;  </li>
    <li class="">   <br></li>
    <li class="alt">   <br></li>
    <li class="">  <br></li>
    <li class="alt">这个浏览器的功能简单，实用，个人很喜欢他，推荐给大家&lt;br/&gt;  </li>
    <li class="">为此我花了很多心血啊，主要是用来交流之用，&lt;br/&gt;  </li>
    <li class="alt">需要交流的朋友跟我联系，&lt;br/&gt;  </li>
    <li class="">我的qq是&lt;u color="DDFF"&gt;43686904&lt;!--&lt;/span--&gt;u&gt; &lt;br/&gt;  </li>
    <li class="alt">我的电话是：&lt;a href="wtai://wp/mc;13588888888"&gt;13588888888&lt;!--&lt;/span--&gt;a&gt;&lt;br/&gt;  </li>
    <li class="">还有很多需要完善的地方&lt;br/&gt;  </li>
    <li class="alt">&lt;a href="local://main.wml"&gt;》返回上一级&lt;!--&lt;/span--&gt;a&gt;  </li>
    <li class="">&lt;!--&lt;/span--&gt;card&gt; &lt;!--&lt;/span--&gt;wml&gt;  </li>
</ol>
</div>
<br>
以后的一些文章我将会解释我是怎么样进行重构的，重构的过程是很快乐的。哈<br><br>下面还是图片<br>继续帖些图出来<br>
<img src="http://wuhua.javaeye.com/upload/picture/pic/3456/b7ef2d33-6e7a-48cc-84c3-5b8836fbff09.jpg" alt="">
这个是今天完善了一个下载wml跟解释wml的进度条，在顶部黄色的那个部分
<img src="http://wuhua.javaeye.com/upload/picture/pic/3455/c6cc7efa-45ae-49f6-b9cc-90440c7e1a30.jpg" alt=""><br>。<br>
<br>
<br><br>继续贴图<br>
下面是打开wap中国网站的截图<br>
<img src="http://wuhua.javaeye.com/upload/picture/pic/3454/abe40160-97d9-46d1-b7cb-8f030d1fb0fc.jpg" alt=""><img src="http://wuhua.javaeye.com/upload/picture/pic/3453/5ca04a58-7d50-46c9-8c9e-34703f94f27d.jpg" alt=""><img src="http://wuhua.javaeye.com/upload/picture/pic/3483/565d54ea-c61f-41a6-b421-2159ff0e7aa0.jpg" alt=""><br>
<br>
<br>
<br>
这个是3G门户图片<br>
<br>
<br>
图片发来发去就是这些，程序开发的工作也还没有结束，但把程序开发好了，并运行一段时间没有内存溢出的时候，再让大家玩下。哈<br><br>
<p><!--[if !supportLists]-->1．&nbsp; <!--[endif]-->今天重构WMLParser，使之不已mainform耦合。经过20多分钟的努力终于重构完毕这个方面的功能</p>
<p><!--[if !supportLists]-->2．&nbsp; <!--[endif]-->下面可能要设计一个把wml转换成string，用于保存网页的功能，比如把string保存到rms中</p>
<p><!--[if !supportLists]-->3．&nbsp; <!--[endif]-->网上看了下，顺便就整理下手机的各个参数的支持..</p>
<p><!--[if !supportLists]-->4．&nbsp; <!--[endif]-->终于搞定了系统属性的查看,发现程序运行一段时间后,内存不段上升.确实是有内存瓶颈,得努力改进</p>
明天跟以后的时间打算设计一个文本解释引擎，就是从文本中解释然后再绘制成控件，主要是用来保存网页
<br>
<br><img src ="http://www.blogjava.net/gooogle/aggbug/119298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-05-23 08:58 <a href="http://www.blogjava.net/gooogle/archive/2007/05/23/119298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用j2me设计一个手机电子书阅读软件 部分源代码解释</title><link>http://www.blogjava.net/gooogle/archive/2007/05/08/115837.html</link><dc:creator>3G工作室</dc:creator><author>3G工作室</author><pubDate>Tue, 08 May 2007 01:10:00 GMT</pubDate><guid>http://www.blogjava.net/gooogle/archive/2007/05/08/115837.html</guid><wfw:comment>http://www.blogjava.net/gooogle/comments/115837.html</wfw:comment><comments>http://www.blogjava.net/gooogle/archive/2007/05/08/115837.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/gooogle/comments/commentRss/115837.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gooogle/services/trackbacks/115837.html</trackback:ping><description><![CDATA[<div style="margin-left: 15px; margin-top: 5px;">
<strong>关键字:</strong> J2ME &nbsp;
JSR 75， j2me&nbsp;&nbsp;&nbsp;&nbsp;
</div>
<p>    终于足球项目告一段落，期间学辛苦，无奈与成长都是可写的。
<br>     在此期间我让UI折腾的紧，甚至曾经想放弃，终究是坚持下来了。想想在一个小小的屏幕上设计一个UI已经是很痛苦的已经事情，何况在pc上设计，真是佩服死了那些高手们。
<br>     最近，时间比较有空，所以把UI修改了下，然后在此基础上＋jsr75规范做了个电子书阅读软件。等我设计好了以后，打算开源，大家共同学习，虽然写的不好，各位高手多指教。现在发布一些读取手机目录的方法。
<br></p>
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<ol class="dp-xml" start="1">
    <li class="alt">package&nbsp;org.pook.file;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;</li>
    <li class="alt">import&nbsp;java.io.IOException;&nbsp;&nbsp;</li>
    <li class="">import&nbsp;java.util.Enumeration;&nbsp;&nbsp;</li>
    <li class="alt">import&nbsp;java.util.Vector;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;</li>
    <li class="alt">import&nbsp;javax.microedition.io.Connector;&nbsp;&nbsp;</li>
    <li class="">import&nbsp;javax.microedition.io.file.FileConnection;&nbsp;&nbsp;</li>
    <li class="alt">import&nbsp;javax.microedition.io.file.FileSystemRegistry;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;</li>
    <li class="alt">import&nbsp;org.pook.log.Log;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;</li>
    <li class="alt">/**&nbsp;&nbsp;</li>
    <li class="">&nbsp;*&nbsp;&lt;b&gt;类名：BookFileImpl.java&lt;/b&gt;&nbsp;&lt;/br&gt;&nbsp;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;*&nbsp;编写日期:&nbsp;2006-10-12&nbsp;&lt;br/&gt;&nbsp;&nbsp;</li>
    <li class="">&nbsp;*&nbsp;程序功能描述：&nbsp;&lt;br/&gt;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;*&nbsp;Demo:&nbsp;&lt;br/&gt;&nbsp;&nbsp;</li>
    <li class="">&nbsp;*&nbsp;Bug:&nbsp;&lt;br/&gt;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;*&nbsp;&nbsp;&nbsp;</li>
    <li class="">&nbsp;*&nbsp;程序变更日期&nbsp;：&lt;br/&gt;&nbsp;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;*&nbsp;变更作者&nbsp;：&lt;br/&gt;&nbsp;&nbsp;&nbsp;</li>
    <li class="">&nbsp;*&nbsp;变更说明&nbsp;：&lt;br/&gt;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;*&nbsp;&nbsp;&nbsp;</li>
    <li class="">&nbsp;*&nbsp;@author&nbsp;wuhua&nbsp;&lt;/br&gt;&nbsp;&lt;a&nbsp;href="mailto:rrq12345@163.com"&gt;rrq12345@163.com&lt;/a&gt;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;*/&nbsp;&nbsp;</li>
    <li class="">public&nbsp;class&nbsp;BookFileImpl&nbsp;implements&nbsp;BookFile&nbsp;{&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;Log&nbsp;log&nbsp;=&nbsp;Log.getLog("BookFileImpl");&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;FileConnection&nbsp;conn&nbsp;=&nbsp;null;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;BookFileImpl(String&nbsp;url){&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn&nbsp;=&nbsp;(FileConnection)&nbsp;Connector.open(&nbsp;url,&nbsp;Connector.READ);&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch(&nbsp;IOException&nbsp;e&nbsp;){&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch(&nbsp;SecurityException&nbsp;e&nbsp;){&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Vector&nbsp;listName()&nbsp;throws&nbsp;IOException&nbsp;{&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vector&nbsp;vc&nbsp;=&nbsp;null;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;conn.isDirectory()&nbsp;){&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumeration&nbsp;names&nbsp;=&nbsp;conn.list();&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vc&nbsp;=&nbsp;new&nbsp;Vector();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(&nbsp;names.hasMoreElements()&nbsp;){&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vc.addElement(names.nextElement());&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;vc;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;read()&nbsp;throws&nbsp;IOException&nbsp;{&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;boolean&nbsp;isFile()&nbsp;{&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(conn.isDirectory())&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getFilePath()&nbsp;{&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checkConn();&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;conn.getPath();&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;checkConn()&nbsp;{&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(conn&nbsp;==&nbsp;null)&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;NullPointerException("文件资源不存在！");&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getFileName()&nbsp;{&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checkConn();&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;conn.getName();&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;close()&nbsp;{&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(conn&nbsp;!=&nbsp;null)&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.close();&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IOException&nbsp;e)&nbsp;{&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;TODO&nbsp;自动生成&nbsp;catch&nbsp;块&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;</li>
</ol>
</div>
</div>
<script>render_code();</script>
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<ol class="dp-xml" start="1">
    <li class="alt">package&nbsp;org.pook.file;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;</li>
    <li class="alt">import&nbsp;java.util.Enumeration;&nbsp;&nbsp;</li>
    <li class="">import&nbsp;java.util.Vector;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;</li>
    <li class="">import&nbsp;javax.microedition.io.file.FileSystemRegistry;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;</li>
    <li class="">import&nbsp;org.pook.log.Log;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;</li>
    <li class="">/**&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;*&nbsp;&lt;b&gt;类名：BookFileManager.java&lt;/b&gt;&nbsp;&lt;/br&gt;&nbsp;编写日期:&nbsp;2006-10-12&nbsp;&lt;br/&gt;&nbsp;程序功能描述：&nbsp;&lt;br/&gt;&nbsp;&nbsp;</li>
    <li class="">&nbsp;*&nbsp;Demo:&nbsp;&lt;br/&gt;&nbsp;Bug:&nbsp;&lt;br/&gt;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;*&nbsp;&nbsp;&nbsp;</li>
    <li class="">&nbsp;*&nbsp;程序变更日期&nbsp;：&lt;br/&gt;&nbsp;变更作者&nbsp;：&lt;br/&gt;&nbsp;变更说明&nbsp;：&lt;br/&gt;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;*&nbsp;&nbsp;&nbsp;</li>
    <li class="">&nbsp;*&nbsp;@author&nbsp;wuhua&nbsp;&lt;/br&gt;&nbsp;&lt;a&nbsp;href="mailto:rrq12345@163.com"&gt;rrq12345@163.com&lt;/a&gt;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;*/&nbsp;&nbsp;</li>
    <li class="">public&nbsp;class&nbsp;BookFileManager&nbsp;{&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;Log&nbsp;log&nbsp;=&nbsp;Log.getLog("BookFileManager");&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;boolean&nbsp;available()&nbsp;{&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;version&nbsp;=&nbsp;System&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getProperty("microedition.io.file.FileConnection.version");&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(version&nbsp;!=&nbsp;null)&nbsp;{&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;BookFile&nbsp;openBookFile(String&nbsp;url)&nbsp;{&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;BookFileImpl(url);&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;Vector&nbsp;listRoots()&nbsp;{&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vector&nbsp;vc&nbsp;=&nbsp;null;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumeration&nbsp;names&nbsp;=&nbsp;FileSystemRegistry.listRoots();&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vc&nbsp;=&nbsp;new&nbsp;Vector();&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(names.hasMoreElements())&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vc.addElement(names.nextElement());&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//log.debug(names.nextElement());&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;vc;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;</li>
    <li class="alt">}&nbsp; <br></li>
</ol>
</div>
</div>
<br><img src ="http://www.blogjava.net/gooogle/aggbug/115837.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gooogle/" target="_blank">3G工作室</a> 2007-05-08 09:10 <a href="http://www.blogjava.net/gooogle/archive/2007/05/08/115837.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>