﻿<?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>Thu, 10 Apr 2008 14:45:40 GMT</lastBuildDate><pubDate>Thu, 10 Apr 2008 14:45:40 GMT</pubDate><ttl>60</ttl><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>1</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://ww