??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲一级特黄大片无码毛片 ,国产天堂亚洲精品,亚洲深深色噜噜狠狠爱网站http://www.tkk7.com/bingle/category/38137.htmlq轻Q是我们最大的资本 Q? 坚定梦想Q毕生追?zh-cnFri, 10 Jul 2009 21:54:20 GMTFri, 10 Jul 2009 21:54:20 GMT60WTK下HttpConnection.open遇到全数字域名时的问?/title><link>http://www.tkk7.com/bingle/archive/2009/07/10/286303.html</link><dc:creator>冰浪</dc:creator><author>冰浪</author><pubDate>Fri, 10 Jul 2009 10:02:00 GMT</pubDate><guid>http://www.tkk7.com/bingle/archive/2009/07/10/286303.html</guid><wfw:comment>http://www.tkk7.com/bingle/comments/286303.html</wfw:comment><comments>http://www.tkk7.com/bingle/archive/2009/07/10/286303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/bingle/comments/commentRss/286303.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/bingle/services/trackbacks/286303.html</trackback:ping><description><![CDATA[     摘要: 在WTK模拟下用HttpConnection.open试q接全数字域名时?x)发生如下错?nbsp; <a href='http://www.tkk7.com/bingle/archive/2009/07/10/286303.html'>阅读全文</a><img src ="http://www.tkk7.com/bingle/aggbug/286303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/bingle/" target="_blank">冰浪</a> 2009-07-10 18:02 <a href="http://www.tkk7.com/bingle/archive/2009/07/10/286303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2ME对html的unicode实体~码的{?/title><link>http://www.tkk7.com/bingle/archive/2009/07/10/286301.html</link><dc:creator>冰浪</dc:creator><author>冰浪</author><pubDate>Fri, 10 Jul 2009 09:57:00 GMT</pubDate><guid>http://www.tkk7.com/bingle/archive/2009/07/10/286301.html</guid><wfw:comment>http://www.tkk7.com/bingle/comments/286301.html</wfw:comment><comments>http://www.tkk7.com/bingle/archive/2009/07/10/286301.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/bingle/comments/commentRss/286301.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/bingle/services/trackbacks/286301.html</trackback:ping><description><![CDATA[     摘要: 在开发j2me览器时Q对于html的unicode实体~码Q我们需要将转换才能正常昄  <a href='http://www.tkk7.com/bingle/archive/2009/07/10/286301.html'>阅读全文</a><img src ="http://www.tkk7.com/bingle/aggbug/286301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/bingle/" target="_blank">冰浪</a> 2009-07-10 17:57 <a href="http://www.tkk7.com/bingle/archive/2009/07/10/286301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>j2me内存优化http://www.tkk7.com/bingle/archive/2009/05/04/268832.html冰浪冰浪Mon, 04 May 2009 08:18:00 GMThttp://www.tkk7.com/bingle/archive/2009/05/04/268832.htmlhttp://www.tkk7.com/bingle/comments/268832.htmlhttp://www.tkk7.com/bingle/archive/2009/05/04/268832.html#Feedback0http://www.tkk7.com/bingle/comments/commentRss/268832.htmlhttp://www.tkk7.com/bingle/services/trackbacks/268832.html阅读全文

冰浪 2009-05-04 16:18 发表评论
]]>
ZJ2ME的网l资讯浏览器http://www.tkk7.com/bingle/archive/2009/04/22/266874.html冰浪冰浪Tue, 21 Apr 2009 17:21:00 GMThttp://www.tkk7.com/bingle/archive/2009/04/22/266874.htmlhttp://www.tkk7.com/bingle/comments/266874.htmlhttp://www.tkk7.com/bingle/archive/2009/04/22/266874.html#Feedback0http://www.tkk7.com/bingle/comments/commentRss/266874.htmlhttp://www.tkk7.com/bingle/services/trackbacks/266874.html阅读全文

冰浪 2009-04-22 01:21 发表评论
]]>
Zandroid手机q_的在U网l音乐播攑֙http://www.tkk7.com/bingle/archive/2009/04/22/266872.html冰浪冰浪Tue, 21 Apr 2009 16:36:00 GMThttp://www.tkk7.com/bingle/archive/2009/04/22/266872.htmlhttp://www.tkk7.com/bingle/comments/266872.htmlhttp://www.tkk7.com/bingle/archive/2009/04/22/266872.html#Feedback0http://www.tkk7.com/bingle/comments/commentRss/266872.htmlhttp://www.tkk7.com/bingle/services/trackbacks/266872.html阅读全文

冰浪 2009-04-22 00:36 发表评论
]]>
J2MEE序开发全方位基础讲解http://www.tkk7.com/bingle/archive/2009/04/09/264597.html冰浪冰浪Thu, 09 Apr 2009 02:50:00 GMThttp://www.tkk7.com/bingle/archive/2009/04/09/264597.htmlhttp://www.tkk7.com/bingle/comments/264597.htmlhttp://www.tkk7.com/bingle/archive/2009/04/09/264597.html#Feedback0http://www.tkk7.com/bingle/comments/commentRss/264597.htmlhttp://www.tkk7.com/bingle/services/trackbacks/264597.html转于http://blog.csdn.net/Mailbomb/archive/2007/08/23/1755741.aspxhttp://blog.csdn.net/Mailbomb/archive/2007/08/23/1755741.aspx

一、J2ME中需要的Java基础知识
现在有大部分人,都是从零开始学J2ME的,学习(fn)J2ME的时候,L从Java基础开始学?fn),而且现在讲Java基础的书c中都是以J2SE来讲基础Q这q学习(fn)造成了一些不必要的麻烦,下面J2ME中用到的和不需要的Java基础知识做一个简单的说明?br />
    J2ME中用到的Java基础知识Q?br />
      1、Java语法基础Q包括基本数据类型、关键字、运符{等
      2、面向对象的思想Q类和对象的概念Q承和多态等{?br />       3、异常处?br />   4、多U程

  J2ME中没有用到的Java基础知识Q?br />
  1、JDK中javac和java命o(h)的?br />   2、Java基础中的很多cdJ2ME中没有,或者类中的Ҏ(gu)做了大量的精。所以徏议在J2ME中熟(zhn)类库?br />   3、Applet、AWT、Swingq些知识在J2ME中根本用不到?br />
  单说q么多,希望学J2ME的朋友们能少C些弯路,不之处希望大家U极指正和补充?br />
二、J2ME中暂时无法完成的功能

  列一些J2ME中暂时无法完成的功能Q希望大家能U极补充Q?br />    1、在手机中不更改代码实现ULQ主要指游戏?br />    2、动态修Ҏ(gu)钮文字?br />    3、在Canvas上接受中文输入?br />    4、操作本地资源、例如地址本、已收短信息{?br />    5、制作破坏性的手机病毒?br />    6、其他等待大家来补充?br />
三、J2ME的跨q_?/span>

  J2ME技术源于JavaQ所以也hJVM的优势,可以在支持Java的^Cq行ULQ但是现在的J2ME技术在跨^C却做的很p糕Q我们来单看一下原因:(x)

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

  4、手机性能问题?br />
  不同手机的可用内存、最大jar文g都有要求Q例如Nokia S40的大部分手机支持的最大jar文g?4KQ最大可用内容ؓ(f)210K?br />
  所以现在的手机软gQ特别是游戏都提供支持的机型列表Q也才有了手机游戏移植h员的存在?br />
四、学?fn)J2ME可以从事的工作种c?/span>


  现在J2ME技术可以说相当的火_(d)q里介绍一些学好了J2ME之后可以从事的工作的U类Q?br />
  1、J2ME游戏开发h?br />
  Ҏ(gu)游戏{划或者文档要求,在某U特定的机型(以Nokia S40或S60居多)开发游戏程序?br />   q是现在大部分J2MEE序员从事的工作?br />   需要熟l掌握:(x)高用户界面、低U用L(fng)面、线E,如果是网l游戏,q需要熟l网l编E?br />
  2、J2ME应用开发h?br />
  现在的移动应用还不是很多Q但是还是出C一些,特别是移动定位以?qing)移动商务相关的内容?br />   需要熟l掌握:(x)高用户界面、线E和|络~程?br />
  3、J2ME游戏UL人员

  参照源代码,可以在一个^C可以q行的游戏移植到其他q_上去。例如将Nokia S40的游戏移植到S60上,或者烦qT618{等?br />
  主要是控制屏q坐标,有些可能需要替换一些API?br />
  需要熟(zhn)各q_之间的差异以?qing)相关的技术参敎ͼ比如屏幕大小、最大jar文g寸{等?br />
五、J2MEE序设计的几个原?/span>

  1、用面向对象编E?br />
  虽然使用面向q程~程可以减小文g的尺寸,但是Z以后l护的方便和利于扩展Q还是要使用面向对象~程?br />
  2、用MVC模式

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

六、从模拟器到真机试

  对于J2ME开发者来_(d)模拟器给我们带来了很多方便,比如可以在模拟器中调试程序以?qing)很方便的察看程序的效果Q但是模拟器也给我们带来了一些问题,比如模拟器实现的bug{等Q所以进行真机测试是必须的?br />
  1、ؓ(f)什么要q行真机试Q?br />
  因ؓ(f)模拟器程序可能存在bugQ以?qing)真机的性能有限Q所以必进行真机测试?br />
  2、如何将E序传输到机器中Q?br />
  程序传输到机器中有如下方式Q?br />    a) OTA下蝲
   b) 使用数据U传?br />    c) U外传输
   d) 蓝牙
  你可以根据条Ӟ选择合适的方式?br />
  3?真机试主要什么?

  真机试的内容很多,主要试以下几个斚wQ?br />    a) E序的功?br />    b) E序的操作性,是否易操?br />    c) E序的大?比如Nokia S40pd的手机大部分接受的最大文件尺ؓ(f)64K
   d) E序q行速度Q速度是否可以忍受?br />
七、从WTK到厂商SDK

  对于J2ME爱好者来_(d)基本上大安是从SUN的WTK(J2ME Wireless Toolkit)开始的Q但是对于实际应用来_(d)仅仅使用WTK是远q不够的Q所以在学习(fn)q程中,必须完成从WTK到SDK的跨?br />
  1、厂商SDK的下载地址Q?br />
  http://blog.csdn.net/Mailbomb/archive/2005/01/01/236606.aspx

  2、厂商SDK和W(xu)TK有什么不同?

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

  有些厂商SDK的用都和W(xu)TK相同Q例如SamSung?br />   Nokia提供了独立的界面来开发,但是q个界面在实际开发中使用不多?br />
  4、厂商SDK的问?br />
  厂商SDK实现q程中,有一些bugQ而且和真机实C一致。例如NOKIA的؜xN题等{?br />

八、在J2ME中获得手机IMEI的方?/span>

  IMEI是Internation mobile entity identification的简Uͼ在手Z输入*#06#可以昄该数字,长度?5位,全球唯一Q永q不?x)冲H,所以可以作别用L(fng)一个标志?br />
  下面是在J2ME中获得IMEI的方法:(x)

  1、MOTOpd的手机可以通过dpȝ的IMEI属性获得,代码如下Q?br />   
String imei = System.getProperty("IMEI");

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


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

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

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

  1、在需要显C的界面中,调用发送网l数据的Ҏ(gu)。每ơ显C时调用该构造方法,不调用Display的setCurrentҎ(gu)昄?br />   2、显C等待界?例如q度条等)Q给用户提示Q在q行|络q接?br />   3、在处理|络反馈的数据完以后Q调用Display的setCurrentҎ(gu)昄昄当前界面?br />
十、增强J2ME的String能力——分割字W串

  从JDK1.4以后QStringcM新增了splitҎ(gu)来实现字W串的分Ԍ但是在J2ME中却没有该方?MIDP2.0中也没有实现)Q但是在实际使用q程中,有些时候的要用到q种操作Q这里将我以前实现的一D代码和大家׃nQ?br />

/**
* 分割字符Ԍ原理Q检字W串中的分割字符Ԍ然后取子?br /> * @param original 需要分割的字符?br /> * @paran regex 分割字符?br /> * @return 分割后生成的字符串数l?br /> */

private static String[] split(String original,String regex)
{
//取子串的起始位置
int startIndex = 0;
//结果数据先攑օVector?br /> Vector v = new Vector();
//q回的结果字W串数组
String[] str = null;
//存储取子串时起始位置
int index = 0;

//获得匚w子串的位|?br /> startIndex = original.indexOf(regex);
//System.out.println("0" + startIndex);
//如果起始字符串的位置于字符串的长度Q则证明没有取到字符串末?br /> //-1代表取到了末?br /> while(startIndex < original.length() && startIndex != -1)
{
String temp = original.substring(index,startIndex);
System.out.println(" " + startIndex);
//取子?br /> v.addElement(temp);

//讄取子串的起始位置
index = startIndex + regex.length();

//获得匚w子串的位|?br /> startIndex = original.indexOf(regex,startIndex + regex.length());
}

//取结束的子串
v.addElement(original.substring(index + 1 - regex.length()));
//Vector对象转换成数l?br /> str = new String[v.size()];
for(int i=0;i
{
str[i] = (String)v.elementAt(i);
}

//q回生成的数l?br /> return str;
}


十一、J2ME在低U用L(fng)面上分行昄文字

  在J2ME的低U用L(fng)面开发中Q经怼(x)遇到需要在Canvas上显C大量的文字Q例如关于界面、游戏说明、游戏公告等信息。如果在设计Ӟ文字的内容和长度都固定Q既不利于修改也不利于维护。下面介l一个简单的Ҏ(gu)Q实C个简单、可l护性强的方式?br />
  实现Ҏ(gu)Q?br />
   1、将需要显C的所有信息做成一个字W串?br />    2、编写一个将该字W串按照要求转换为字W串数组的方法?br />    3、将转换后的数组以@环的方式昄在Canvas上?br />
  通过q样三个步骤Q则修改昄的信息时Q只需要修改包含显CZ息的字符串即可,自己书写的方法可以按照以前的标准重新分割新的字符丌Ӏ如果需要修Ҏ(gu)行显C的字符个数Q则只需要修改自׃写的Ҏ(gu)卛_?br />
  通过q样一U实现方式,可以很方便的实现昄一些比较长的文本信息,即是可变长度的字符串也没有问题?br />

十二、J2ME中用记录存储系l?RMS)存储信息

  在MIDP中,没有文g的概念,所以永久存储一般只能依靠记录存储系l实玎ͼ关于记录存储pȝ的简介,可以参看教程Q?a target="_new">http://www-900.ibm.com/developerWorks/cn/java/j-wi-rms/index.shtml

  下面是一些记录存储系l的常用~码介绍Q?br />
   1、打开记录集:(x)

  打开记录集用RecordStore里面的静态方法openRecordStoreQ示例代码如下:(x)
    
RecordStore rs = RecordStore.openRecordStore(“username”,true);


  q样打开了一个名UCؓ(f)rs的记录集Q其中username录集的名Uͼ该名U可以根据需要来取,W二个参C表是否则没有时创建新的记录集Qtrue代表在该记录集不存在Ӟ创徏新的记录集,false代表不创建?br />
  如果在打开记录集时Q该记录集不存在Q则抛出RecordStoreNotFoundException异常Q所以检记录集是否已创建可以用该异常?br />
  注意Q记录集打开以后记得关闭?br />
   2、向记录集中写入数据

   2.1增加数据

  向已l打开的记录集中添加数据,需要用addRecordҎ(gu)Q示例代码:(x)
    

byte[] bytes = {1,2,3};
int id = rs. addRecord(bytes,0,bytes.length);
    

  该代码将字节数组bytes的全部内容写入到记录集中Q该Ҏ(gu)的返回gؓ(f)该信息的idQ注意:(x)id?开始,而不是从0开始?br />   你可以@环用该Ҏ(gu)向记录集中写入多条数据?br />
   2.2修改数据

  修改已经存在的记录集中指定id的数据,需要用setRecordҎ(gu)Q示例代码:(x)
    

byte[] bytes = {1,2,3};
rs. setRecord(1,bytes,0,bytes.length);
    

  以上代码的作用是字节数lbytes的全部内容写入到id?的记录集rs中?br />   该操作会(x)覆盖已有的数据?br />   说明Q有些时候,你需要将信息写入到记录集中的W一条记录中Q则可以l合以上两个Ҏ(gu)Q则W一ơ时向记录集增加数据Q以后来q行修改?br />
   3、从记录集中d数据

  从记录集中读取已有数据,需要用getRecordҎ(gu)Q示例代码:(x)

byte[] bytes = rs. getRecord(1);
    

  该代码从记录集rs中读取第一条数据,读取到的数据放在bytes数组中?br />   在读取数据时Q可以获得记录集中id的个敎ͼ可以使用getNumRecordsҎ(gu)获得
  l合代码为:(x)

int number = rs. getNumRecords();
int id = 1;
if(id >0 && id < number)
{
  byte[] bytes = rs. getRecord(1);
}


   4、从记录集中删除记录

  从记录集中删除记录的Ҏ(gu)有两U:(x)逻辑删除和物理删除?br />   逻辑删除是指l删除的记录打标记?br />   物理删除是指从物理上删除该记录,但是该记录的id不能被重用,也就是说该id不会(x)被l用。例如一个记录集中有5个记录,假设你删除了id?的数据,则剩余记录的id依然????。这l便历带来了一定的ȝ?br />
   5、便历记录集

  便历记录集,卌问记录集中的所有数据,有两个方法,详见Q?br />      http://gceclub.sun.com.cn/NASApp/sme/controller/teclist?tid=0103

   6、其他操?br />
  删除记录?br />   删除记录集不同于删除记录Q需要用deleteRecordStoreҎ(gu)Q示例代码:(x)
    

RecordStore. deleteRecordStore(“username”);
    

  该代码删除名UCؓ(f)username的记录集?br />
十三、J2ME加密数据的一个第三方开源免费类库介l?/span>

  在J2ME~程中,l常遇到一些数据在存储或者传输时需要加密,下面介绍一个第三方的加密类库的一些资料:(x)

  加密cd的官方主:(x)http://www.bouncycastle.org/
  介绍的文章:(x)
  中文Q?a target="_new">http://18900.motorola.com/ewa_portal/develope/jc_j2messl_5_1.jsp
  英文Q?a target="_new">http://www.javaworld.com/javaworld/jw-12-2002/jw-1220-wireless.html
  该文章的源代码包含用的一些方法?br />   备注Q因cd提供的功能比较强大,所以类库的寸比较大,最后在发布旉要将cd中不需要的cd?br />

十四、如何播攑֣?/span>

  在J2ME中,处理声音需要用到Mobile Media API(MMAPI)Q该包是MIDP1.0的可选包Q在MIDP2.0中已l包含了q个包。所以如果你使用MIDP1.0的话Q请认你的q行环境是否支持?br />
  一般手机支持的声音文g格式为wav、mid和mpg{。具体请查阅你的手机说明文档?br />   在声韛_理中Q有很多处理的方式,q里说一下最常用的情况,播放JAR文g中的wav文g?br />   播放声音文g的流E:(x)

   1、按照一定的格式d声音文g?br />
  播放JAR文g中的声音文g一般是声x件处理成的形式。示例代码:(x)

InputStream is = this.getClass().getResourceAsStream("/Autorun.wav");

其中Autorun.wav文g位于JAR文g的根目录下,如果位于别的目录Q需要加上目录名Uͼ?res /Autorun.wav?br />
   2、将d到的内容传递给播放器?br />
  流信息传递给播放器,播放器按照一定的格式来进行解码操作,CZ代码Q?br />

Player player = Manager.createPlayer(is,"audio/x-wav");

  其中W一个参Cؓ(f)对象,W二个参Cؓ(f)声音文g的格式?br />
   3、播攑֣韟?br />
  使用Player对象的startҎ(gu)Q可以将声音播放出来Q示例代码:(x)

player.start()Q?br />

  在播攑֣x也可以设定声x攄ơ数Q可以用PlayercM的setLoopCountҎ(gu)来实玎ͼ具体可查阅API文档?br />   下面是在NOKIA S60模拟器中试通过。代码如下:(x)

package sound;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import java.io.*;

public class SoundMIDlet extends MIDlet
{
  private Player player = null;
  /** Constructor */
  public SoundMIDlet()
{
try
{
InputStream is = this.getClass().getResourceAsStream("/Autorun.wav");
player = Manager.createPlayer(is,"audio/x-wav");
}
catch(IOException e)
{
System.out.println("1:" + e);
}
catch(MediaException e)
{
System.out.println("2:" + e);
}
catch(Exception e)
{
System.out.println("3:" + e);
}
}

/** Main method */
public void startApp()
{
if(player != null)
{
try
{
     player.start();
}
catch(MediaException e)
{
     System.out.println("4:" + e);
}
}
}

/** Handle pausing the MIDlet */
public void pauseApp()
{
}

/** Handle destroying the MIDlet */
public void destroyApp(boolean unconditional)
{
}
}


十五、J2ME 3D~程的一些资?/span>

  随着J2ME技术的发展Q以?qing)硬仉度的提升,3D游戏E序慢慢的变成LQ最q想学习(fn)q一块的~程Q所以收集了一些资料,和大家一起分享:(x)

  1、JSR184
  JSR184是Nokia公司赯的一个关?D API的规范,下蝲地址为:(x)
  http://www.forum.nokia.com/main/1,,1_0_10,00.html#jsr184

  2、Nokia?D~程资料
    http://www.forum.nokia.com/main/1,6566,21,00.html

  3?D引擎
  一个简单的开放源代码?D游戏引擎
    http://www.j2me.com.cn/Soft_Show.asp?SoftID=19
  国内一个合作开?D引擎的项目:(x)
    http://gceclub.sun.com.cn/NASApp/sme/jive/thread.jsp?forum=11&thread=8593

  4、一?D游戏产品
    http://games.sina.com.cn/newgames/2004/04/040217696.shtml

  5、支?D的开发工?br />   当前一些高端的手机支持3D开发,支持3D开发的开发工具中Q通用的有SUN的J2MEWTK2.2。专用的是厂商提高的支持JSR184的SDK?br />

十六?D~程——第一?DE序

  参考WTK2.2提供的demoQ完成了W一?DE序Q虽然很单,而且有些问题q不是很清楚Q还是把代码׃n出来和愿意学?fn)J2ME 3D~程的朋友一起学?fn)?br />
  关于代码的编译和q行说明如下Q?br />   1、以下代码在J2ME WTK2.2下面~译通过?br />   2、代码分Z个文Ӟ(x)First3DCanvas.java和First3DMIDlet.java?br />   3、用J2ME WTK2.2建立新的工程Q主MIDletcMؓ(f)Qfirst3d. First3DMIDlet
  4、将代码保存在你的工E目录下的first3d目录下?br />   5、将J2ME WTK安装目录下的apps"Demo3D"res"com"superscape"m3g"wtksamples"retainedmode"content目录中的swerve.m3g文g复制C的工E目录下的res目录下?br />   6、你的工E徏立后Q设|工E,通过WTK界面中的“讄”按钮打开讄H口Q在“API选择”中,讄“目标q_”为:(x)自定义;“?#8221;?#8220;MIDP2.0”Q?#8220;配置”?#8220;CLDC1.1”Q选中“Mobile 3D Graphics for J2ME(JSR184)”?br />   7、这样你可以编译和q行以下代码了?br />   源代码如下:(x)

// First3DMIDlet.java
package first3d;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class First3DMIDlet extends MIDlet
{
private First3DCanvas displayable = new First3DCanvas();
public void startApp()
{
Display.getDisplay(this).setCurrent(displayable);
}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}
}

// First3Dcanvas.java
package first3d;
import javax.microedition.lcdui.*;
import javax.microedition.m3g.*;
import java.util.*;
/**
* W一?DE序
*/
public class First3DCanvas extends Canvas implements Runnable
{
/**World对象*/
private World myWorld = null;
/**Graphics3D对象*/
private Graphics3D g3d = Graphics3D.getInstance();
/**Camera对象*/
private Camera cam = null;
private int viewport_x;
private int viewport_y;
private int viewport_width;
private int viewport_height;
private long worldStartTime = 0;
//重绘旉
private int validity = 0;

public First3DCanvas()
{
//启动重绘界面的线E?br /> Thread thread = new Thread(this);
thread.start();
try
{
//导入3D囄
myWorld = (World) Loader.load("/swerve.m3g")[0];
viewport_x = 0;
viewport_y = 0;
viewport_width = getWidth();
viewport_height = getHeight();
cam = myWorld.getActiveCamera();
//讄cam对象
float[] params = new float[4];
int type = cam.getProjection(params);
if (type != Camera.GENERIC)
{
//calculate window aspect ratio
float waspect = viewport_width / viewport_height;
if (waspect < params[1])
{
float height = viewport_width / params[1];
viewport_height = (int) height;
viewport_y = (getHeight() - viewport_height) / 2;
}
else
{
float width = viewport_height * params[1];
viewport_width = (int) width;
viewport_x = (getWidth() - viewport_width) / 2;
}
}
worldStartTime = System.currentTimeMillis();
}
catch (Exception e) {}
}

protected void paint(Graphics g)
{
//清除背景
g.setColor(0x00);
g.fillRect(0, 0, getWidth(), getHeight());
//?D对象l定
g3d.bindTarget(g);
g3d.setViewport(viewport_x, viewport_y, viewport_width, viewport_height);
long startTime = System.currentTimeMillis() - worldStartTime;
validity = myWorld.animate((int)startTime);
try
{
g3d.render(myWorld);
}
finally
{
g3d.releaseTarget();
}
}

public void run()
{
try
{
while(true)
{
//重绘囑Ş
repaint(viewport_x, viewport_y, viewport_width, viewport_height);
}
}
catch(Exception e){}
}
}


十七、在J2ME|络~程中用CMWAP代理

  在中国移动提供的|络q接中,分ؓ(f)CMNET和CMWAP两种Q其中CMNET可以无限制的讉K互联|络Q资Ҏ(gu)较贵。CMWAPcM一个HTTP的代码,只能讉K支持HTTP的应用,但是资费便宜Q稳定性比较差?br />
  在实际的J2ME|络~程中,一般需要提供以CMWAP代理的方式连接网l,在J2ME中,q接的代码和直接q接有所不同Q代码如下:(x)

HttpConnection http = (HttpConnection)Connector.open(("http://10.0.0.172/"+url);
http.setRequestProperty("X-Online-Host",ServerName);

  例如你需要访问的地址为:(x)http://www.test.com/login/loginServlet则上面的代码׃ؓ(f)Q?br />

HttpConnection http = (HttpConnection)Connector.open(("http://10.0.0.172/" + "login/loginServlet");
http.setRequestProperty("X-Online-Host","www.test.com");

  在实际用过E中Q只需要用实际需要访问的地址的域名或者IP来代替ServerNameQ例如示例中?#8220;www.test.com”Q用后l的地址cM替代码中的urlQ例如示例中?#8220;login/loginServlet”Q就可以实际的用CMWAP代理来进行连接了?br />

十八、J2ME中的旉处理全攻?/span>

  旉处理在程序开发中相当常见Q下面对于时间处理做一个简单的说明?br />
  一、时间的表达方式

  旉在J2ME中有两种表达方式Q?br />
  1、以和GMT1970q??号午?2点和现在相差的毫U数来代?br />   q种方式适合比较两个旉之间的差倹{?br />   2、以对象的Ş式来表达

  二、时间处理的相关c?br />
  旉处理在J2ME中涉?qing)三个类Q?br />
  1、Systemc?br />

long time = System. currentTimeMillis();

  使用该方法可以获得当前时_(d)旉的表达方式ؓ(f)上面提到的第一U?br />   2、Datec?br />

Date date = new Date();

  获得当前旉Q用对象的形式来进行表达?br />   3、Calendarc?br />

Calendar calendar = Calendar. getInstance();


  三、时间处理的具体操作

  1、以上三U表达方式的转换Q?br />
  a)Systemc获得的旉转换为Date对象

Date date = new Date(System. currentTimeMillis());

  b)Datecd的对象{换ؓ(f)Calendarcd的对?br />
 
Calendar calendar = Calendar. getInstance();
Date date = new Date();
calendar.setTime(date);


  2、用Calendar完成一些日期操作:(x)

  Calendar是时间处理中最常用也是功能最强大的类Q可以用它来获得某个旉的日期、星期几{信息?br />   获得日期Q?br />

Calendar calendar = Calendar. getInstance();
……
int day = calendar.get(Calendar. DATE);

  获得日期、年份、星期的操作和这个类伹{?br />   需要注意的是:(x)Calendar中表C月份的数字和实际相?Q即1月用数字0表示Q?月用数字1表示Q?#8230;…12月用数字11表示?br />

十九(ji)、J2ME中随机数字处理全ȝ

  在程序中生成随机数字Q用处比较,如h工智能领域等{,q里对于在J2ME中生成随机数的操作进行一个简单的整理Q希望对大家能有帮助?br />
  J2ME和J2SE不同Q不能用Mathcȝrandom来生成随机数字,只能使用java.util包的RandomcL生成随机数字?br />
  1、创建Randomcd的对象:(x)

Random random = new Random();
Random random = new Random(10010010);

  以上两种是创建Random对象的方式,W一U用默认构造方法,和以下的代码作用完全{h(hun)Q?br />   
 Random random = new Random(System. currentTimeMillis());

  相当与用当前时间作为种子数字来q行创徏?br />   W二U方式通过自己来指定种子数字来q行创徏?br />   大家可以Ҏ(gu)需要用以上两U方式的MU?br />
  2、生成随机数字:(x)

  创徏好了随机对象以后Q我们就可以来生成随机数字了Q?br />   生成随机整数Q?br />

int k = random.nextInt();

生成随机长整敎ͼ(x)

long l = random.nextLong();


  3、生成指定范围的数字Q?br />
  例如生成0-10之间的随机数字:(x)

int k = random.nextInt();
int j = Math.abs(k % 10);

  首先生成一个随机整数kQ然后用k?0取余Q最后用MathcȝabsҎ(gu)取绝对|获得0-10之间的随机数字?br />   获得0-15之间的随机数Q类|(x)

int k = random.nextInt();
int j = Math.abs(k % 15);

  获得10-20之间的随机数字:(x)

int k = random.nextInt();
int j = Math.abs(k % 10) + 10;


二十、在J2ME手机~程中用字?/span>

  在J2ME手机~程中,可以通过使用字体cZ—Font在低U用L(fng)面中Q获得更好的表现效果Q那么如何用FontcdQ?br />
  首先Q由于手备的限制Q手Z支持的字体类型很有限Q所以在J2ME中只能用手机支持的默认字体来构造Fontcd象。下面是创徏Fontcȝ对象时用的Ҏ(gu)Q?br />

getFont(int face,int style,int size);

例如Q?br />

Font font = Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font. SIZE_MEDIUM);

  无论哪一个参敎ͼ都只能用系l设|的数|q些数值具体的大小在不同的手机上可能不同。下面对于其中的三个参数的取值做详细的介l:(x)
  face参数指字体的外观Q其的取|(x)
  FACE_MONOSPACE——等宽字?br />   FACE_PROPORTIONAL——均衡字?br />   FACE_SYSTEM——系l字?br />   style参数指字体的样式Q其的取|(x)
  STYLE_BOLD——粗?br />   STYLE_ITALIC——斜?br />   STYLE_PLAIN——普?br />   STYLE_UNDERLINED——下划线
  STYLE_BOLD | STYLE_ITALIC——粗斜体
  STYLE_UNDERLINED | STYLE_BOLD——带下划U粗?br />   STYLE_UNDERLINED | STYLE_ITALIC——带下划U斜?br />   STYLE_UNDERLINED | STYLE_ITALIC | STYLE_BOLD——带下划U的_斜?br />   size参数指字体的大小Q其的取|(x)
  SIZE_SMALL——小
  SIZE_MEDIUM——中
  SIZE_LARGE——大
  通过上面的参数的|可以l合Z需要的字体对象?br />
  下面是一些常用的字体操作Q?br />   1. 获得pȝ的默认字体:(x)

Font font = Font.getDefaultFont();

  2. 在panitҎ(gu)内部Q假设Graphics参数的名UCؓ(f)gQ则获得当前字体的方法是Q?br />

Font font = g.getFont();

  3. 在panitҎ(gu)内部Q假设Graphics参数的名UCؓ(f)gQ则讄当前字体的方法是Q?br />

g.setFont(font);

  其中fontZ构造好的字体对象?br />
  4. 在MIDP2.0中,List可以讄每行的字体格式,Ҏ(gu)是:(x)

list.setFont(0,font);

  则上面的代码是将list中的W一行设|ؓ(f)fontcd的字体?br />

二十一、在J2ME手机E序开发中使用颜色

  在J2ME手机开发过E中Q需要经常用到颜色来q行l制Q增强程序的表现效果Q下面就介绍一下如何用颜艌Ӏ?br />
  ׃J2ME技术比较简单,所以没有实C门的颜色c,而只是用RGB的概忉|代表颜色。这里简单介l一下RGB的概念,颜色是由U?Red)、绿(Green)、蓝(Blue)三原色组成的Q所以可以用这三个颜色的组合来代表一U具体的颜色Q其中R、G、B的每个数值都位于0-255之间。在表达颜色的时候,卛_以用三个数字来表达Q也可以使用一个格式如0X00RRGGBBq样格式的十六进制来表达Q下面是常见颜色的表辑Ş式:(x)

  U色Q?255,0,0)?x00FF0000
  l色Q?0,255,0)?x0000FF00
  蓝色Q?255,255,255)?x00FFFFFF
  其他颜色也可以通过上面的方式组合出来?br />
  知道了颜色的表达方式以后Q下面来介绍一下如何在J2MEE序中用颜Ԍ涉及(qing)的方法均在GraphicscMQ有以下几个Q?br />
  1.getColor()Q?br />   获得当前使用的颜Ԍq回值是0x00RRGGBB格式的数字。例如:(x)

int color = g.getColor();

  其中g为Graphicscd的对象?br />
  2.setColor(int RGB)Q?br />   讄使用的颜艌Ӏ例如:(x)

g.setColor(0x00ff0000);


  3.setColor(int red, int green, int blue)
  和上面的Ҏ(gu)作用一P例如Q?br />

g.setColor(255,0,0);

  在设|了Graphics使用的颜色以后,再进行绘制的时候,可以绘制指定的颜色了?br />

二十二、在J2ME联网应用中获得客L(fng)的手机号?/span>

  在J2MEE序开发过E中Qؓ(f)了一定的需要,l常需要来获得用户的手机号码,但是q个功能却在标准的J2MEcd中没有提供?br />
  在用中国移动的CMWAP方式q接|络Ӟ中国Ud?x)将用户的手机号码放在一个名UCؓ(f)x-up-calling-line-id的头信息中,可以通过d该头信息Q获得用L(fng)手机L(fng)Q具体代码如下:(x)

String usermphone = http.getHeader("x-up-calling-line-id");

  其中h(hun)ttp是HttpConnctioncd的对象?br />
二十三、用J2ME发送手机短信息

  在程序中Q发送短信息的方式一般有三种Q?br />
  1?使用E序在网l上发送短信息Q例如各大网站的短信业务。这U方式是通过E序信息发送给q营商的|关服务器,然后通过q营商的|络发送给手机?br />
  2?在计机中,通过数据U连接到手机Q然后通过手机来发送短信息。这U方式是通过使用AT指o(h)来实现。爱立信手机的AT指o(h)你可以在以下地址扑ֈQ?br /> http://mobilityworld.ericsson.com.cn/development/download_hit.asp

  3?通过在手Zq行的程序来发送短信息。这个正是本文实现的方式?br />   在J2ME中,如果惛_送短信息Q需要用WMA包,MIDP2.0中已l包含,MIDP1.0中可以通过厂商提供的扩展API实现Q和W(xu)MA的类库基本一栗?br />
下面是用WMA向指定手机号码发送短信息的一个方法,很简单。当然WMA也提供了其他的方式来发送更多的内容?br />

// SMSUtil.java
package my.util;
import javax.wireless.messaging.*;
import javax.microedition.io.*;
/**
* 发送文本短信息的方?br /> */
public class SMSUtil
{
/**
* l指定号码发送短信息
* @param content 短信息内?br /> * @param phoneNumber 手机L(fng)
* @return 发送成功返回trueQ否则返回false
*/
public static boolean send(String content,String phoneNumber)
{
//q回?br /> boolean result = true;
try
{
//地址
String address = "sms://+" + phoneNumber;
//建立q接
MessageConnection conn = (MessageConnection)Connector.open(address);
//讄短信息类型ؓ(f)文本Q短信息有文本和二进制两U类?br /> TextMessage msg = (TextMessage)conn.newMessage(MessageConnection.TEXT_MESSAGE);
//讄信息内容
msg.setPayloadText(content);
//发?br /> conn.send(msg);
}
catch(Exception e)
{
result = false;
//未处?br /> }
return result;
}
}


二十四、用简单的J2MEE序试MIDlet的生命周?/span>

  在MIDletE序学习(fn)中,生命周期是一个比较抽象的概念。其实生命周期就是一个简单的规定Q规定了MIDlet中的每个Ҏ(gu)Q什么时候被pȝ调用。下面是一个示例代码,在每个方法的内部都输Z条语句,可以Ҏ(gu)E序的输出结果来验证各方法被调用的顺序,具体代码如下Q?br />

//文g名:(x)LifeCircleMIDlet.java
import javax.microedition.midlet.*;
/**
* 试MIDlet的生命周?br /> */
public class LifeCircleMIDlet extends MIDlet
{
/**
* 默认构造方?br /> */
public LifeCircleMIDlet()
{
System.out.println("默认构造方?);
}
/**
* 启动Ҏ(gu)
*/
public void startApp()
{
System.out.println("startAppҎ(gu)");
}
/**
* 暂停Ҏ(gu)
*/
public void pauseApp()
{
System.out.println("pauseAppҎ(gu)");
}
/**
* 销毁方?br /> * @param b
*/
public void destroyApp(boolean b)
{
System.out.println("destroyAppҎ(gu)");
}
}

  在J2WTK中运行该E序Ӟ可以使用览器中?#8220;MIDlet”菜单中的暂停和恢复菜单,模拟暂停事g?br />
二十五、用OTA来发布你的程?/span>

  众所周知QJ2MEE序发布的Ş式主要有QOTA、数据线传输、红外和蓝牙传输{。这里简单说说如何通过OTA来发布你的程序?br />
  OTA是Over The Air的简写,也就是通过|络下蝲Q这是主要的发布形式之一。现在的癑֮都是采用这UŞ式?br />
  使用OTA来发布程序,需要如下几个步骤:(x)
  1、在你的WEB服务器上d对于jad和jar文g的MIME支持?br />   后缀?jad
  MIMEcd:text/vnd.sun.j2me.app-descriptor
  后缀?jar
  MIMEcd:application/java-archive

  2、发布WML面Q?br />   例如你的jar文g名test.jadQ则最单的下蝲面是:(x)
 

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN"

"http://www.wapforum.org/DTD/wml13.dtd">

<wml>

<card id="card1" title="Download Midlet">

<a href="test.jad">test</a>

</card>

</wml>

              你可以将以上代码保存?/span>WEB服务器上Q例如保存ؓ(f)text.wml

3?nbsp;修改jad文gQ?/span>

?/span>jad文g中增?/span>

MIDlet-Jar-URL: http://domain/directory/test.jar

其中?/span>http://domain/directory/test.jarZ?/span>jar文g的\径?/span>

       l过上面的设|,你就可以你?/span>wml面路径作ؓ(f)你的WAP下蝲面发布了。用户只需要在手机上输入这个\径就可以讉K和下载你的程序了?/span>



冰浪 2009-04-09 10:50 发表评论
]]>
J2MEq连看基功能源代?/title><link>http://www.tkk7.com/bingle/archive/2009/04/09/264592.html</link><dc:creator>冰浪</dc:creator><author>冰浪</author><pubDate>Thu, 09 Apr 2009 02:25:00 GMT</pubDate><guid>http://www.tkk7.com/bingle/archive/2009/04/09/264592.html</guid><wfw:comment>http://www.tkk7.com/bingle/comments/264592.html</wfw:comment><comments>http://www.tkk7.com/bingle/archive/2009/04/09/264592.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/bingle/comments/commentRss/264592.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/bingle/services/trackbacks/264592.html</trackback:ping><description><![CDATA[<div style="text-align: center">J2MEq连看基功能源代?含详l注?<br /> 作者:(x)陈跃?br /> Qhttp://blog.csdn.net/mailbomb</div> <br /> //界面cM?br /> import javax.microedition.lcdui.Canvas;<br /> import javax.microedition.lcdui.Graphics;<br /> <br /> /**<br />  * q连看游戏界?br />  */<br /> public class LinkCanvas extends Canvas implements Runnable{<br />     /**游戏逻辑c?/<br />     GameEngine engine;    <br />     /**屏幕宽度*/<br />     int width;<br />     /**屏幕高度*/<br />     int height;<br />     public LinkCanvas(){<br />         //创徏对象<br />         engine = new GameEngine();<br />         //获得屏幕的高度和宽度<br />         width = getWidth();<br />         height = getHeight();<br />         //启动U程<br />         Thread t = new Thread(this);<br />         t.start();<br />     }<br />     <br />     /**<br />      * l制Ҏ(gu)<br />      */<br />     protected void paint(Graphics g) {<br />         //清屏<br />         clearScreen(g);<br />         //l制地图<br />         engine.paintMap(g);<br />         //l制选择?br />         engine.paintSelectArea(g);<br />         //l制q线<br />         engine.paintLinkLine(g);<br />     }<br />     <br />     /**<br />      * 清屏Ҏ(gu)<br />      * @param g ȝ<br />      */<br />     private void clearScreen(Graphics g){<br />         g.setColor(0xffffff);<br />         g.fillRect(0, 0, width, height);<br />         g.setColor(0);<br />     }<br />     <br />     public void keyPressed(int keyCode){<br />         int action = getGameAction(keyCode);<br />         switch(action){<br />         case UP:<br />             engine.moveUP();<br />             break;<br />         case DOWN:<br />             engine.moveDown();<br />             break;<br />         case LEFT:<br />             engine.moveLeft();<br />             break;<br />         case RIGHT:<br />             engine.moveRight();<br />             break;<br />         case FIRE:<br />             engine.fire();//选择?br />             break;<br />         }<br />     }<br /> <br />     public void run() {<br />         try{<br />             while(true){<br />                 //延时<br />                 Thread.sleep(100);<br />                 //每次判断逻辑<br />                 engine.action();<br />                 repaint();<br />             }<br />         }catch(Exception e){<br />             e.printStackTrace();<br />         }<br />     }<br /> }<br /> <br /> //逻辑cL代码<br /> import java.util.*;<br /> import javax.microedition.lcdui.*;<br /> /**<br />  * 游戏数据和逻辑c?br />  */<br /> public class GameEngine {<br />     /**选中块的个数*/<br />     private int selectTileNum = 0;<br />     //W一个选择块的行号和列?br />     /**行号*/<br />     private int firstRow;<br />     /**列号*/<br />     private int firstCol;<br />     //W二个选择块的行号和列?br />     /**行号*/<br />     private int secondRow;<br />     /**列号*/<br />     private int secondCol;<br />     <br />     //当前选择框,默认在左上角<br />     /**当前选择框的行号*/<br />     private int cRow;<br />     /**当前选择框的列号*/<br />     private int cCol;<br />     <br />     /**最大行?/<br />     private final int MAX_ROW = 10;<br />     /**最大列?/<br />     private final int MAX_COL = 10;<br />     <br />     /**地图数据Q?代表I,数据1-10分别代表十种不同的结?/<br />     private int[][] map = new int[MAX_ROW][MAX_COL];<br />     /**随机数对?/<br />     private Random ran = new Random();<br />     <br />     //地图区域左上角的坐标<br />     private final int LEFTX = 20;<br />     private final int LEFTY = 50;<br />     <br />     /**每个单元格的宽度*/<br />     private final int TILE_WIDTH = 20;<br />     /**每个单元格的高度*/<br />     private final int TILE_HEIGHT = 20;<br />     <br />     /**q线cd*/<br />     private int linkType;<br />     <br />     /**无法q线*/<br />     private final int NO_LINK = 0;<br />     /**水^q线*/<br />     private final int H_LINK = 1;<br />     /**垂直联系*/<br />     private final int V_LINK = 2;<br />     /**一个拐点,先移动x*/<br />     private final int ONE_CORNER_FIRSTX = 3;<br />     /**一个拐点,先移动y*/<br />     private final int ONE_CORNER_FIRSTY = 4;<br />     /**两个拐点Q待完善*/<br />     private final int TWO_CORNER = 5;<br />     <br />     /**<br />      * 两次拐弯的行号和列号<br />      * 数据格式为:(x)<br />      *   W一个拐点的行号Q第一个拐点的列号Q第二个拐点的行PW二个拐点的列号<br />      */<br />     int[] p = new int[4]; <br />     <br />     public GameEngine(){<br />         //初始化地图数?br />         initMap();<br />     }<br />     <br />     /**<br />      * 初始化地图数?br />      */<br />     private void initMap(){<br />         for(int row = 0;row < map.length;row++){<br />             for(int col = 0;col < map[row].length;col++){<br />                 map[row][col] = row + 1;<br />             }<br />         }<br />         //循环打ؕ10?br />         int tempRow;<br />         int tempCol;<br />         int temp;<br />         for(int i = 0;i < 10;i++){<br />             for(int row = 0;row < map.length;row++){<br />                 for(int col = 0;col < map[row].length;col++){<br />                     //随机行号<br />                     tempRow = Math.abs(ran.nextInt() % 10);<br />                     //随机列号<br />                     tempCol = Math.abs(ran.nextInt() % 10);<br />                     //如果不是同一个单元格Q则交换数据<br />                     if(!((tempRow == row) && (tempCol == col))){<br />                         temp = map[row][col];<br />                         map[row][col] = map[tempRow][tempCol];<br />                         map[tempRow][tempCol] = temp;<br />                     }<br />                 }<br />             }<br />         }<br />     }<br />     <br />     /**<br />      * l制地图数据<br />      * @param g ȝ<br />      */<br />     public void paintMap(Graphics g){<br />         for(int row = 0;row < map.length;row++){<br />             for(int col = 0;col < map[row].length;col++){<br />                 //如果没有数据Q则跌<br />                 if(map[row][col] == 0){<br />                     continue;<br />                 }else{//l制方块<br />                     //l制Ҏ(gu)<br />                     g.drawRect(LEFTX + col * TILE_WIDTH, LEFTY + row * TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT);<br />                     //l制数字<br />                     g.drawString(String.valueOf(map[row][col]), LEFTX + col * TILE_WIDTH + 5, <br />                             LEFTY + row * TILE_HEIGHT + 4, <br />                             Graphics.TOP | Graphics.LEFT);<br />                 }<br />             }<br />         }<br />     }<br />     <br />     /**<br />      * l制选择?br />      * @param g ȝ<br />      */<br />     public void paintSelectArea(Graphics g){<br />         //l制当前选择?br />         g.setColor(0xff00);<br />         g.drawRect(LEFTX + cCol * TILE_WIDTH, LEFTY + cRow * TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT);<br />         g.setColor(0);<br />         <br />         //l制选中?br />         switch(selectTileNum){<br />         case 1:  //选择一?br />             g.setColor(0xff0000);<br />             g.drawRect(LEFTX + firstCol * TILE_WIDTH, LEFTY + firstRow * TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT);<br />             g.setColor(0);<br />             break;<br />         case 2:  //选中两个<br />             g.setColor(0xff0000);<br />             g.drawRect(LEFTX + firstCol * TILE_WIDTH, LEFTY + firstRow * TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT);<br />             g.drawRect(LEFTX + secondCol * TILE_WIDTH, LEFTY + secondRow * TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT);<br />             g.setColor(0);<br />             break;<br />         }<br />     }<br />     <br />     /**<br />      * l制方块q线<br />      * @param g ȝ<br />      */<br />     public void paintLinkLine(Graphics g){<br />         //如果无连U,则直接返?br />         if(linkType == NO_LINK){<br />             return;<br />         }<br />         //Ҏ(gu)q线cd实现l制<br />         //l制到方块的中心?br />         switch(linkType){<br />         case H_LINK://水^<br />         case V_LINK://垂直<br />             paintLine(g,firstRow,firstCol,secondRow,secondCol);<br />             break;<br />         case ONE_CORNER_FIRSTX://一个拐弯,先移动X<br />             //水^U?br />             paintLine(g,firstRow,firstCol,firstRow,secondCol);<br />             //垂直U?br />             paintLine(g,firstRow,secondCol,secondRow,secondCol);<br />             break;<br />         case ONE_CORNER_FIRSTY://一个拐弯,先移动Y<br />             //水^U?br />             paintLine(g,firstRow,firstCol,secondRow,firstCol);<br />             //垂直U?br />             paintLine(g,secondRow,firstCol,secondRow,secondCol);<br />             break;<br />         case TWO_CORNER:<br />             //?到第一个拐点的q线<br />             paintLine(g,firstRow,firstCol,p[0],p[1]);<br />             //两个拐点之间的连U?br />             paintLine(g,p[0],p[1],p[2],p[3]);<br />             //W二个拐点到?的连U?br />             paintLine(g,p[2],p[3],secondRow,secondCol);<br />             break;<br />         }<br />         //逻辑代码Q清除连接类?br />         linkType = NO_LINK;<br />     }<br />     <br />     /**<br />      * l制两个方块中心点的q线<br />      * @param g  ȝ<br />      * @param r1 方块1的行?br />      * @param c1 方块1的列?br />      * @param r2 方块2的行?br />      * @param c2 方块2的列?br />      */<br />     private void paintLine(Graphics g,int r1,int c1,int r2,int c2){<br />         g.drawLine(LEFTX + c1 * TILE_WIDTH + TILE_WIDTH/2, <br />                 LEFTY + r1 * TILE_HEIGHT + TILE_HEIGHT/2, <br />                 LEFTX + c2 * TILE_WIDTH + TILE_WIDTH/2,<br />                 LEFTY + r2 * TILE_HEIGHT + TILE_HEIGHT/2);<br />         <br />     }<br />     <br />     /**<br />      * 向左Ud选择?br />      */<br />     public void moveLeft(){<br />         if(cCol > 0){<br />             cCol--;<br />         }<br />     }<br />     <br />     /**<br />      * 向右Ud选择?br />      */<br />     public void moveRight(){<br />         if(cCol < MAX_COL -1){<br />             cCol++;<br />         }<br />     }<br />     <br />     /**<br />      * 向上Ud选择?br />      */<br />     public void moveUP(){<br />         if(cRow > 0){<br />             cRow--;<br />         }<br />     }<br />     <br />     /**<br />      * 向下Ud选择?br />      */<br />     public void moveDown(){<br />         if(cRow < MAX_ROW - 1){<br />             cRow++;<br />         }<br />     }<br />     <br />     /**<br />      * 定键逻辑处理<br />      */<br />     public void fire(){<br />         //如果选择的块为空Q则直接q回<br />         if(map[cRow][cCol] == 0){<br />             return;<br />         }<br />         //选中的块的数量增?<br />         selectTileNum++;<br />         //判别存储位置<br />         switch(selectTileNum){<br />         case 1: //W一ơ选择<br />             firstRow = cRow;<br />             firstCol = cCol;<br />             break;<br />         case 2: //W二ơ选择<br />             //选择同一个块,2个选择块都失去选中<br />             if((firstRow == cRow) && (firstCol == cCol)){<br />                 selectTileNum = 0;<br />                 return;<br />             }<br />             secondRow = cRow;<br />             secondCol = cCol;<br />             break;<br />         }<br />     }<br />     <br />     /**<br />      * 判断(r1,c1)块和(r2,c2)块中间是否ؓ(f)I<br />      * 不包含这两个?br />      * @param r1 ?的行?br />      * @param c1 ?的列?br />      * @param r2 ?的行?br />      * @param c2 ?的列?br />      * @return true代表为空Qfalse代表不ؓ(f)I?br />      */     <br />     private boolean isEmptyRow(int r1,int c1,int r2,int c2){<br />         //判断是否位于同一?br />         if(r1 != r2){<br />             return false;<br />         }<br />         //判断两个块的相对位置<br />         if(c1 > c2){ //W一块位于右?br />             for(int col = c1 - 1;col > c2;col--){<br />                 //如果有非I块<br />                 if(map[r1][col] != 0){<br />                     return false;<br />                 }<br />             }<br />         }else{ //W一块位于左?br />             for(int col = c2 - 1;col > c1;col--){<br />                 //如果有非I块<br />                 if(map[r1][col] != 0){<br />                     return false;<br />                 }<br />             }<br />         }<br />         return true;<br />     }<br />     <br />     /**<br />      * 判断?r1,c1)和块(r2,c2)之间是否是空?br />      * 不包含这两个?br />      * @param r1 ?的行?br />      * @param c1 ?的列?br />      * @param r2 ?的行?br />      * @param c2 ?的列?br />      * @return true代表为空Qfalse代表不ؓ(f)I?br />      */<br />     private boolean isEmptyCol(int r1,int c1,int r2,int c2){<br />         //判断是否位于同一?br />         if(c1 != c2){<br />             return false;<br />         }<br />         //判断两个块的相对位置<br />         if(r2 > r1){//W一个块在上?br />             for(int row = r1 + 1;row < r2;row++){<br />                 //如果有非I块<br />                 if(map[row][c1] != 0){<br />                     return false;<br />                 }<br />             }<br />         }else{//W二个块在上?br />             for(int row = r2 + 1;row < r1;row++){<br />                 //如果有非I块<br />                 if(map[row][c1] != 0){<br />                     return false;<br />                 }<br />             }<br />         }<br />         return true;<br />     }<br />     <br />     /**<br />      * 判断一个块是否为空<br />      * @param r 块的行号<br />      * @param c 块的列号<br />      * @return true代表为空Qfalse代表不空<br />      */<br />     private boolean isEmptyCell(int r,int c){<br />         return map[r][c] == 0;<br />     }    <br />         <br />     /**<br />      * 是否是一ơ{弯实现连U?br />      * @return NO_LINK代表没有q线Q其他g表对应的q线cd<br />      */<br />     private int isOneCornerLink(int r1,int c1,int r2,int c2){<br />         //先移动行Q再Ud?br />         if(isEmptyCell(r1,c2)){ //转折点ؓ(f)I?br />             if(isEmptyRow(r1,c1,r1,c2) & isEmptyCol(r1,c2,r2,c2)){<br />                 return ONE_CORNER_FIRSTX;<br />             }<br />         }<br />         //先移动列Q再Ud?br />         if(isEmptyCell(r2,c1)){//转折点ؓ(f)I?br />             if(isEmptyCol(r1,c1,r2,c1) & isEmptyRow(r2,c1,r2,c2)) {<br />                 return ONE_CORNER_FIRSTY;<br />             }<br />         }<br />         //无连?br />         return NO_LINK;<br />     }<br />     <br />     /**<br />      * 是否l过2ơ{折实现连?br />      * @param r1 ?的行?br />      * @param c1 ?的列?br />      * @param r2 ?的行?br />      * @param c2 ?的列?br />      * @return true代表可以q接Qfalse代表不能<br />      */<br />     private boolean isTwoCornerLink(int r1,int c1,int r2,int c2){<br />         int result;<br />         //正常情况Q划分成4个方?br />         //?向上<br />         for(int row = r1 -1;row >= 0;row--){<br />             //如果有数据不为空Q则直接l束该方向的试<br />             if(map[row][c1] != 0){<br />                 break;<br />             }<br />             //存储W一个拐点的坐标<br />             p[0] = row;<br />             p[1] = c1;<br />             //每次都尝试{折,则变成一个{点的操作<br />             result = isOneCornerLink(row,c1,r2,c2);<br />             //如果可以q接<br />             if(result != NO_LINK){<br />                 //存储W二个拐点的位置<br />                 switch(result){<br />                 case ONE_CORNER_FIRSTX:<br />                     p[2] = row;<br />                     p[3] = c2;<br />                     break;<br />                 case ONE_CORNER_FIRSTY:<br />                     p[2] = r2;<br />                     p[3] = c1;<br />                     break;<br />                 }<br />                 return true;<br />             }<br />         }<br />         //?向下<br />         for(int row = r1 + 1;row < MAX_ROW;row++){<br />             //如果有数据不为空Q则直接l束该方向的试<br />             if(map[row][c1] != 0){<br />                 break;<br />             }<br />             //存储W一个拐点的坐标<br />             p[0] = row;<br />             p[1] = c1;<br />             //每次都尝试{折,则变成一个{点的操作<br />             result = isOneCornerLink(row,c1,r2,c2);<br />             //如果可以q接<br />             if(result != NO_LINK){<br />                 //存储W二个拐点的位置<br />                 switch(result){<br />                 case ONE_CORNER_FIRSTX:<br />                     p[2] = row;<br />                     p[3] = c2;<br />                     break;<br />                 case ONE_CORNER_FIRSTY:<br />                     p[2] = r2;<br />                     p[3] = c1;<br />                     break;<br />                 }<br />                 return true;<br />             }<br />         }<br />         //?向左<br />         for(int col = c1 -1;col >= 0;col--){<br />             //如果有数据不为空Q则直接l束该方向的试<br />             if(map[r1][col] != 0){<br />                 break;<br />             }<br />             //存储W一个拐点的坐标<br />             p[0] = r1;<br />             p[1] = col;<br />             //每次都尝试{折,则变成一个{点的操作<br />             result = isOneCornerLink(r1,col,r2,c2);<br />             //如果可以q接<br />             if(result != NO_LINK){<br />                 //存储W二个拐点的位置<br />                 switch(result){<br />                 case ONE_CORNER_FIRSTX:<br />                     p[2] = r1;<br />                     p[3] = c2;<br />                     break;<br />                 case ONE_CORNER_FIRSTY:<br />                     p[2] = r2;<br />                     p[3] = col;<br />                     break;<br />                 }<br />                 return true;<br />             }<br />         }<br />         //?向右<br />         for(int col = c1  + 1;col < MAX_COL;col++){<br />             //如果有数据不为空Q则直接l束该方向的试<br />             if(map[r1][col] != 0){<br />                 break;<br />             }<br />             //存储W一个拐点的坐标<br />             p[0] = r1;<br />             p[1] = col;<br />             //每次都尝试{折,则变成一个{点的操作<br />             result = isOneCornerLink(r1,col,r2,c2);<br />             //如果可以q接<br />             if(result != NO_LINK){<br />                 //存储W二个拐点的位置<br />                 switch(result){<br />                 case ONE_CORNER_FIRSTX:<br />                     p[2] = r1;<br />                     p[3] = c2;<br />                     break;<br />                 case ONE_CORNER_FIRSTY:<br />                     p[2] = r2;<br />                     p[3] = col;<br />                     break;<br />                 }<br />                 return true;<br />             }<br />         }<br />         <br />         //四个特例Q也是出地图区域的连?br />         //实现地图区域上侧的连接,也就是到上侧是一个空?br />         if((isEmptyCol(r1,c1,-1,c1)) & (isEmptyCol(r2,c2,-1,c2))){<br />             p[0] = -1;<br />             p[1] = c1;<br />             p[2] = -1;<br />             p[3] = c2;<br />             return true;<br />         }<br />         //左侧<br />         if((isEmptyRow(r1,c1,r1,-1)) & (isEmptyRow(r2,c2,r2,-1))){<br />             p[0] = r1;<br />             p[1] = -1;<br />             p[2] = r2;<br />             p[3] = -1;<br />             return true;<br />         }<br />         //下侧<br />         if((isEmptyCol(r1,c1,MAX_ROW,c1)) & (isEmptyCol(r2,c2,MAX_ROW,c2))){<br />             p[0] = MAX_ROW;<br />             p[1] = c1;<br />             p[2] = MAX_ROW;<br />             p[3] = c2;<br />             return true;<br />         }<br />         //右侧<br />         if((isEmptyRow(r1,c1,r1,MAX_COL)) & (isEmptyRow(r2,c2,r2,MAX_COL))){<br />             p[0] = r1;<br />             p[1] = MAX_COL;<br />             p[2] = r2;<br />             p[3] = MAX_COL;<br />             return true;<br />         }        <br />         return false;<br />     }<br />     <br />     /**<br />      * 逻辑判断是否有连U?br />      * @return NO_LINK代表无连U,其它数据代表有连U?br />      */<br />     private int logic(){<br />         //如果数g?br />         if(map[firstRow][firstCol] != map[secondRow][secondCol]){<br />             return NO_LINK;<br />         }<br />         //判断q接方式<br />         if(isEmptyRow(firstRow,firstCol,secondRow,secondCol)){ //水^q线<br />             return H_LINK;<br />         }<br />         if(isEmptyCol(firstRow,firstCol,secondRow,secondCol)){//垂直q线<br />             return V_LINK;<br />         }<br />         //一个{点的q接<br />         int result = isOneCornerLink(firstRow,firstCol,secondRow,secondCol);<br />         if(result != NO_LINK){<br />             return result;<br />         }<br />         //两个转点的连?br />         if(isTwoCornerLink(firstRow,firstCol,secondRow,secondCol)){<br />             return TWO_CORNER;<br />         }        <br />         //q回无连?br />         return NO_LINK;<br />     }<br />     <br />     /**<br />      * 逻辑判别和逻辑处理<br />      */<br />     public boolean action(){<br />         //判断是否选择两个方块<br />         if(selectTileNum != 2){<br />             return false;<br />         }<br />         boolean b = false;<br />         //判断是否有连U?br />         linkType = logic();<br />         //如果有连U,则消?br />         if(linkType != NO_LINK){<br />             map[firstRow][firstCol] = 0;<br />             map[secondRow][secondCol] = 0;<br />             b = true;<br />         }<br />         //选择的块数初始化<br />         selectTileNum = 0;<br />         return b;<br />     }<br /> } <img src ="http://www.tkk7.com/bingle/aggbug/264592.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/bingle/" target="_blank">冰浪</a> 2009-04-09 10:25 <a href="http://www.tkk7.com/bingle/archive/2009/04/09/264592.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>非常的文章推荐http://www.tkk7.com/bingle/archive/2009/04/09/264590.html冰浪冰浪Thu, 09 Apr 2009 01:48:00 GMThttp://www.tkk7.com/bingle/archive/2009/04/09/264590.htmlhttp://www.tkk7.com/bingle/comments/264590.htmlhttp://www.tkk7.com/bingle/archive/2009/04/09/264590.html#Feedback0http://www.tkk7.com/bingle/comments/commentRss/264590.htmlhttp://www.tkk7.com/bingle/services/trackbacks/264590.html惛_?fn)J2ME的朋友可要仔l看看我q篇文章?
  阅读全文

冰浪 2009-04-09 09:48 发表评论
]]>
J2ME安全?/title><link>http://www.tkk7.com/bingle/archive/2009/04/09/264587.html</link><dc:creator>冰浪</dc:creator><author>冰浪</author><pubDate>Thu, 09 Apr 2009 01:43:00 GMT</pubDate><guid>http://www.tkk7.com/bingle/archive/2009/04/09/264587.html</guid><wfw:comment>http://www.tkk7.com/bingle/comments/264587.html</wfw:comment><comments>http://www.tkk7.com/bingle/archive/2009/04/09/264587.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/bingle/comments/commentRss/264587.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/bingle/services/trackbacks/264587.html</trackback:ping><description><![CDATA[     摘要: MIDP 2.0标准定义?个安全域QSecurity DomainQ,每一个MIDlet在安装之后,都被分配到其中一个安全与当中  <a href='http://www.tkk7.com/bingle/archive/2009/04/09/264587.html'>阅读全文</a><img src ="http://www.tkk7.com/bingle/aggbug/264587.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/bingle/" target="_blank">冰浪</a> 2009-04-09 09:43 <a href="http://www.tkk7.com/bingle/archive/2009/04/09/264587.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用MMAPI播放gif动画http://www.tkk7.com/bingle/archive/2009/04/09/264586.html冰浪冰浪Thu, 09 Apr 2009 01:42:00 GMThttp://www.tkk7.com/bingle/archive/2009/04/09/264586.htmlhttp://www.tkk7.com/bingle/comments/264586.htmlhttp://www.tkk7.com/bingle/archive/2009/04/09/264586.html#Feedback0http://www.tkk7.com/bingle/comments/commentRss/264586.htmlhttp://www.tkk7.com/bingle/services/trackbacks/264586.html阅读全文

冰浪 2009-04-09 09:42 发表评论
]]>
使用KXMLhttp://www.tkk7.com/bingle/archive/2009/04/09/264585.html冰浪冰浪Thu, 09 Apr 2009 01:39:00 GMThttp://www.tkk7.com/bingle/archive/2009/04/09/264585.htmlhttp://www.tkk7.com/bingle/comments/264585.htmlhttp://www.tkk7.com/bingle/archive/2009/04/09/264585.html#Feedback0http://www.tkk7.com/bingle/comments/commentRss/264585.htmlhttp://www.tkk7.com/bingle/services/trackbacks/264585.html阅读全文

冰浪 2009-04-09 09:39 发表评论
]]>
JavaME中文~码http://www.tkk7.com/bingle/archive/2009/04/09/264584.html冰浪冰浪Thu, 09 Apr 2009 01:38:00 GMThttp://www.tkk7.com/bingle/archive/2009/04/09/264584.htmlhttp://www.tkk7.com/bingle/comments/264584.htmlhttp://www.tkk7.com/bingle/archive/2009/04/09/264584.html#Feedback0http://www.tkk7.com/bingle/comments/commentRss/264584.htmlhttp://www.tkk7.com/bingle/services/trackbacks/264584.html阅读全文

冰浪 2009-04-09 09:38 发表评论
]]>
~写高效友好的多U程J2ME联网应用http://www.tkk7.com/bingle/archive/2009/04/09/264583.html冰浪冰浪Thu, 09 Apr 2009 01:37:00 GMThttp://www.tkk7.com/bingle/archive/2009/04/09/264583.htmlhttp://www.tkk7.com/bingle/comments/264583.htmlhttp://www.tkk7.com/bingle/archive/2009/04/09/264583.html#Feedback0http://www.tkk7.com/bingle/comments/commentRss/264583.htmlhttp://www.tkk7.com/bingle/services/trackbacks/264583.html public void commandAction(Command c, Displayable s) {
    if (c == mExitCommand)
      notifyDestroyed();
    else if (c == mConnectCommand)
      connect();
}

private void connect() {
    String url = getAppProperty("NetworkThreading.URL");
   
    try {
     
      HttpConnection hc = (HttpConnection)Connector.open(url);
      InputStream in = hc.openInputStream();
     
      int contentLength = (int)hc.getLength();
      if (contentLength == -1) contentLength = 255;
      byte[] raw = new byte[contentLength];
........
.......
}
当你q行q样的程序的时候会(x)出现什么问题呢Qwtk?x)提CZ联网工作可能?x)堵塞用戯入,让你到另外一个线E去q行联网操作。OKQ那么我们按照他的要求新Z个线E来q行联网Q比如这样写Q?br /> public void commandAction(Command c, Displayable s) {
if (c == mExitCommand)
    notifyDestroyed();
else if (c == mConnectCommand) {
    Thread t = new Thread() {
      public void run() {
        connect();
      }
    };
    t.start();
}
}
q样联网可以通过了,那么Z么会(x)q样呢?明白事物背后的原理显得非常的重要Q下面我做一下介l,当程序运行的时候,Application Management Software(应用理软g)首先初始化一个MIDlet,然后调用他的startApp()Ҏ(gu)使得MIDletq入active状态,q条E序分支是ȝE,他执行其他的Ҏ(gu)后都?x)返回到q个分支上来l箋执行。然后联|是个可能堵塞的操作Q意味着他可能长旉都不q回。我曄写的联网E序在手Zq行Q的比较耗费旉。如果他不返回,那么׃能进行后面的操作Q用户也不能输入。这L(fng)上去手机像M一Pq显然不够友好。看看下面的原理囑֐Q?br /> Hijacking the system event thread
当我们在应用E序中新Z个线E来处理联网或者浏览大量RMS数据的时候就不一样了。这时候启动线E后ȝE会(x)立刻q回Q不?x)堵塞?br /> Using a new thread for network activity
仔细xq样同样有不好的地方Q尽他可以正常工作Q但是每ơ用h下按钮的时候都?x)有新的U程产生Q这h然不够高效。幸好j(lu)ava中提供了wait()和notify()/notifyAll()来协调这L(fng)问题Q我们启动线E后让他q入{待的状态,当用h下按钮的时候才让他l箋q行。代码类DP(x)
public synchronized void run() {
while (mTrucking) {
    try { wait(); }
    catch (InterruptedException ie) {}
    if (mTrucking) connect();
}
}

public synchronized void go() {
notify();
}
Using a single worker thread
q样效率比较高了Q当用户q行联网操作的时候我们应该做一个提C界面,比如一个动d诉用h在进行联|操作。这h较友好。那么当用户选择联网动作的时候,我们让我提前做好的欢q界面显C在屏幕上,联网l束后再把返回的l果昄出来。这样就是一个出色的联网应用E序了。下面的q个代码可以在屏q上描绘一个动ȝ效果Q当然你也可以修改一下做成自己喜Ƣ的样子?br /> import java.util.*;

import javax.microedition.lcdui.*;

public class WaitCanvas
    extends Canvas {
private int mCount, mMaximum;
private int mInterval;

private int mWidth, mHeight, mX, mY, mRadius;
private String mMessage;

public WaitCanvas() {
    mCount = 0;
    mMaximum = 36;
    mInterval = 100;
   
    mWidth = getWidth();
    mHeight = getHeight();
   
    // Calculate the radius.
    int halfWidth = (mWidth - mRadius) / 2;
    int halfHeight = (mHeight - mRadius) / 2;
    mRadius = Math.min(halfWidth, halfHeight);
   
    // Calculate the location.
    mX = halfWidth - mRadius / 2;
    mY = halfHeight - mRadius / 2;

    // Create a Timer to update the display.
    TimerTask task = new TimerTask() {
      public void run() {
        mCount = (mCount 1) % mMaximum;
        repaint();
      }
    };
    Timer timer = new Timer();
    timer.schedule(task, 0, mInterval);
}

public void setMessage(String s) {
    mMessage = s;
    repaint();
}

public void paint(Graphics g) {
    int theta = -(mCount * 360 / mMaximum);
   
    // Clear the whole screen.
    g.setColor(255, 255, 255);
    g.fillRect(0, 0, mWidth, mHeight);
   
    // Now draw the pinwheel.
    g.setColor(0, 0, 0);
    g.drawArc(mX, mY, mRadius, mRadius, 0, 360);
    g.fillArc(mX, mY, mRadius, mRadius, theta 90, 90);
    g.fillArc(mX, mY, mRadius, mRadius, theta 270, 90);
   
    // Draw the message, if there is a message.
    if (mMessage != null)
      g.drawString(mMessage, mWidth / 2, mHeight,
          Graphics.BOTTOM | Graphics.HCENTER);
}
}



冰浪 2009-04-09 09:37 发表评论
]]>
J2ME中通过Http协议传输囄http://www.tkk7.com/bingle/archive/2009/04/09/264582.html冰浪冰浪Thu, 09 Apr 2009 01:36:00 GMThttp://www.tkk7.com/bingle/archive/2009/04/09/264582.htmlhttp://www.tkk7.com/bingle/comments/264582.htmlhttp://www.tkk7.com/bingle/archive/2009/04/09/264582.html#Feedback0http://www.tkk7.com/bingle/comments/commentRss/264582.htmlhttp://www.tkk7.com/bingle/services/trackbacks/264582.html  阅读全文

冰浪 2009-04-09 09:36 发表评论
]]>
优化J2ME中的paint()函数http://www.tkk7.com/bingle/archive/2009/04/09/264581.html冰浪冰浪Thu, 09 Apr 2009 01:33:00 GMThttp://www.tkk7.com/bingle/archive/2009/04/09/264581.htmlhttp://www.tkk7.com/bingle/comments/264581.htmlhttp://www.tkk7.com/bingle/archive/2009/04/09/264581.html#Feedback0http://www.tkk7.com/bingle/comments/commentRss/264581.htmlhttp://www.tkk7.com/bingle/services/trackbacks/264581.html阅读全文

冰浪 2009-04-09 09:33 发表评论
]]>
各品牌手机键?/title><link>http://www.tkk7.com/bingle/archive/2009/04/09/264579.html</link><dc:creator>冰浪</dc:creator><author>冰浪</author><pubDate>Thu, 09 Apr 2009 01:28:00 GMT</pubDate><guid>http://www.tkk7.com/bingle/archive/2009/04/09/264579.html</guid><wfw:comment>http://www.tkk7.com/bingle/comments/264579.html</wfw:comment><comments>http://www.tkk7.com/bingle/archive/2009/04/09/264579.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/bingle/comments/commentRss/264579.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/bingle/services/trackbacks/264579.html</trackback:ping><description><![CDATA[     摘要: 原文Qhttp://www.jum.cn/bbs/archiver/?tid-8155.htmlQ?nbsp; <a href='http://www.tkk7.com/bingle/archive/2009/04/09/264579.html'>阅读全文</a><img src ="http://www.tkk7.com/bingle/aggbug/264579.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/bingle/" target="_blank">冰浪</a> 2009-04-09 09:28 <a href="http://www.tkk7.com/bingle/archive/2009/04/09/264579.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2MEҎ(gu)http://www.tkk7.com/bingle/archive/2009/04/09/264578.html冰浪冰浪Thu, 09 Apr 2009 01:26:00 GMThttp://www.tkk7.com/bingle/archive/2009/04/09/264578.htmlhttp://www.tkk7.com/bingle/comments/264578.htmlhttp://www.tkk7.com/bingle/archive/2009/04/09/264578.html#Feedback0http://www.tkk7.com/bingle/comments/commentRss/264578.htmlhttp://www.tkk7.com/bingle/services/trackbacks/264578.htmlQ: 按理说NOKIA的手机应该比moto?qing)国产手机(MTKQ性能要好一点,但是一个大的jar包(比如3MBQ的J2MEE序在nokia上跑不v来,但在moto?qing)国产手Z却能跑v来?
       A:一个经验丰富的高手告诉我说Q主要是两者的JVM实现机制的差别。前者是加蝲所有的内容到内存,后者是按需加蝲。所以前者可以在有限的JAR包中提高性能Q后者呢Q各有利弊吧?

       Q:一个J2MEE序Q在WTK下面可以很好的运行,但放在我?250上面Q可以成功安装,q行时却没有一点反应。真是郁闗?
       A:  q种情况一般是׃内存占用的问题。WTK是在PC上跑的,内存相对来说不吃紧。你的J2MEE序如果在WTK模拟器的范围内,可以跑v来。但在手ZQ却没有那么多的内存可用Q自然跑不v来?

       Q:我的一个J2MEE序Q在WTK下面可以正常的从Form切换到Canvas,但放到手ZQ却L切不q来Q气L啦?
       A:q时Q主要原因也可能是内存占用?

1、showNotify与hideNotify调用的时机?
昄序Qcanvas -> Form -> Canvas
在canvas被绘制前QshowNotify()?x)被调用Q在showNotify()执行q程中如果有按键Q则存在事g队列中,{showNotify()q回后在执行?
如果q个canvas讄了全屏,则showNotify()之后?x)调用sizeChanged()
showNotifyq回后,开始执行paint()?
q是如果要切换到FormQ则?x)先调用hideNotify(),然后昄Form。从Form切换到canvasQ则又会(x)调用showNotify(),q回后,调用paint()?

2、在eclipse里面Q也可以像JBuilder那样一ơ修改一个变量在多个地方的用,Ҏ(gu)是:(x)选择变量 Qshift+alt+RQ修改,定Q搞?

3?ME中,如果惌取文本文Ӟ最好是把这个文本文件用utf-8~码Q然后在d的时候,new  String(bytes,"utf-8");

4、在eclipse中,如果出现不能调试的情况,你可以试试把你之前设|的断点都清除掉Q然后在try一下?

5、在模拟器上Q大写不敏感,不区分大写。但是在我的NOKIA3250上,是区分大写??map.PNG"在wtk模拟器上用map.png可以跑,在手Z是不行的?

6、MIDP 2.0安全机制 ?MIDlet 数字{֐
    MIDP 2.0 ?GSM/UTMS 讑֤定义?4 U保护域Q?manufacturer( 讑֤刉商 ) , operator( Udq营?) , trusted third party( 可信ȝW三?) , and untrusted( 不受信Q?) Q除?untrusted 域外Q每个保护域都对应一l根证书Q用于签?MIDlet 的签名证书的根证书必d含在q些根证书中Q用不同的{֐证书{֐?MIDlet 被自动归类予根证书所属的保护域,根证书与保护域的关系是:(x)一个保护域可以有许多个根证书,而一个根证书只能对应于一个保护域?

    具体来讲Q?manufacturer 域属于设备制造商Q其根证书是讑֤刉商自己的根证书Q?operator 域运营商Q一般用其 SIM 卡中的根证书Q?trusted third party 域则预置了全球知名的数字证书颁发机构 (CA) 的根证书Q用于验证由 CA 颁发?MIDlet {֐证书Q?untrusted 域没有根证书Q将用于没有{֐?MIDlet ?MIDP 1.0 ?

7、当byte[][] bytes = new byte[2][3]?bytes.length = 2, byte[0].length = 3
8、while(true)循环的一U替?for(;;){}
9、javap命o(h)的作?
javap是j2se中的一个查看类的方法声明的工具Q比如:(x)
javap -private java.util.Calendar
可以看到q个cȝҎ(gu)声明?
10、Graphics的translateҎ(gu)的用?
        g.translate(x,y)
        把绘制的起始坐标Ud到x,y位置Q绘制的时候,都是相对?x,y),如果x复到默认的坐标系Q则g.translate(-x,-y);


Q{于http://jacky-zhang.javaeye.com/blog/153654Q?/div>

冰浪 2009-04-09 09:26 发表评论
]]>
HTTP协议基础http://www.tkk7.com/bingle/archive/2009/04/09/264577.html冰浪冰浪Thu, 09 Apr 2009 01:24:00 GMThttp://www.tkk7.com/bingle/archive/2009/04/09/264577.htmlhttp://www.tkk7.com/bingle/comments/264577.htmlhttp://www.tkk7.com/bingle/archive/2009/04/09/264577.html#Feedback0http://www.tkk7.com/bingle/comments/commentRss/264577.htmlhttp://www.tkk7.com/bingle/services/trackbacks/264577.html
通常HTTP消息包括客户机向服务器的h消息和服务器向客h的响应消息。这两种cd的消息由一个v始行Q一个或者多个头域,一个只是头域结束的I和可选的消息体组成。HTTP的头域包括通用_(d)h_(d)响应头和实体头四个部分。每个头域由一个域名,冒号Q?Q和域g部分l成。域名是大小写无关的Q域值前可以dM数量的空格符Q头域可以被扩展为多行,在每行开始处Q用至一个空格或制表W?

通用头域

通用头域包含h和响应消息都支持的头域,通用头域包含Cache-Control、Connection、Date、Pragma、Transfer- Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩展Q如果存在不支持的通用头域Q一般将?x)作为实体头域处理。下面简单介l几个在UPnP消息中用的通用头域?

Cache-Control头域

Cache-Control指定h和响应遵循的~存机制。在h消息或响应消息中讄Cache-Controlq不?x)修改另一个消息处理过E中的缓存处理过E。请求时的缓存指令包?no-cache、no-store、max-age、max-stale、min-fresh、only-if-cachedQ响应消息中的指令包?public、private、no-cache、no-store、no-transform、must-revalidate、proxy- revalidate、max-age。各个消息中的指令含义如下:(x)

Public指示响应可被M~存区缓存?
Private指示对于单个用户的整个或部分响应消息Q不能被׃n~存处理。这允许服务器仅仅描q当用户的部分响应消息,此响应消息对于其他用L(fng)h无效?
no-cache指示h或响应消息不能缓?
no-store用于防止重要的信息被无意的发布。在h消息中发送将使得h和响应消息都不用缓存?
max-age指示客户机可以接收生存期不大于指定时_(d)以秒为单位)的响应?
min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应?
max-stale指示客户机可以接收超时期间的响应消息。如果指定max-stale消息的|那么客户机可以接收超时期指定g内的响应消息?

Date头域

Date头域表示消息发送的旉Q时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表CZ界标准时Q换成本地旉Q需要知道用h在的时区?

Pragma头域

Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同?

h消息

h消息的第一行ؓ(f)下面的格式:(x)
MethodSPRequest -URISPHTTP-VersionCRLFMethod表示对于Request-URI完成的方法,q个字段是大写敏感的,包括OPTIONS?GET、HEAD、POST、PUT、DELETE、TRACE。方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的?GETҎ(gu)取回由Request-URI标识的信息。HEADҎ(gu)也是取回由Request-URI标识的信息,只是可以在响应时Q不q回消息体?POSTҎ(gu)可以h服务器接收包含在h中的实体信息Q可以用于提交表单,向新ȝ、BBS、邮件群l和数据库发送消息?

SP表示I格。Request-URI遵@URI格式Q在此字Dؓ(f)星号Q?Q时Q说明请求ƈ不用于某个特定的资源地址Q而是用于服务器本w。HTTP- Version表示支持的HTTP版本Q例如ؓ(f)HTTP/1.1。CRLF表示换行回RW。请求头域允许客L(fng)向服务器传递关于请求或者关于客h的附加信息。请求头域可能包含下列字DA(ch)ccept、Accept-Charset、Accept-Encoding、Accept-Language?Authorization、From、Host、If-Modified-Since、If-Match、If-None-Match、If- Range、If-Range、If-Unmodified-Since、Max-Forwards、Proxy-Authorization?Range、Referer、User-Agent。对h头域的扩展要求通讯双方都支持,如果存在不支持的h头域Q一般将?x)作为实体头域处理?

典型的请求消息:(x)


GEThttp://class/download.microtool.de:80/somedata.exe
Host:download.microtool.de
Accept:*/*
Pragma:no-cache
Cache-Control:no-cache
Referer:http://class/download.microtool.de/
User-Agent:Mozilla/4.04[en](Win95;I;Nav)
Range:bytes=554554-

上例W一行表CHTTP客户端(可能是浏览器、下载程序)通过GETҎ(gu)获得指定URL下的文g。棕色的部分表示h头域的信息,l色的部分表C通用头部分?

Host头域

Host头域指定h资源的IntenetL和端口号Q必表C求url的原始服务器或网关的位置。HTTP/1.1h必须包含L头域Q否则系l会(x)?00状态码q回?

Referer头域

Referer 头域允许客户端指定请求uri的源资源地址Q这可以允许服务器生成回退链表Q可用来登陆、优化cache{。他也允许废除的或错误的q接׃l护的目的被q踪。如果请求的uri没有自己的uri地址QReferer不能被发送。如果指定的是部分uri地址Q则此地址应该是一个相对地址?

Range头域

Range头域可以h实体的一个或者多个子范围。例如,

表示?00个字节:(x)bytes=0-499
表示W二?00字节Qbytes=500-999
表示最?00个字节:(x)bytes=-500
表示500字节以后的范_(d)(x)bytes=500-
W一个和最后一个字节:(x)bytes=0-0,-1
同时指定几个范围Qbytes=500-600,601-999

但是服务器可以忽略此h_(d)如果无条件GET包含Rangeh_(d)响应?x)以状态码206QPartialContentQ返回而不是以200QOKQ?

User-Agent头域

User-Agent头域的内容包含发求的用户信息?

响应消息

响应消息的第一行ؓ(f)下面的格式:(x)

HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF
HTTP -Version表示支持的HTTP版本Q例如ؓ(f)HTTP/1.1。Status-Code是一个三个数字的l果代码。Reason-Phrasel?Status-Code提供一个简单的文本描述。Status-Code主要用于机器自动识别QReason-Phrase主要用于帮助用户理解?Status-Code的第一个数字定义响应的cdQ后两个数字没有分类的作用。第一个数字可能取5个不同的|(x)

1xx:信息响应c,表示接收到请求ƈ且l处?
2xx:处理成功响应c,表示动作被成功接收、理解和接受
3xx:重定向响应类Qؓ(f)了完成指定的动作Q必L受进一步处?
4xx:客户端错误,客户h包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正执行一个正的h

响应头域允许服务器传递不能放在状态行的附加信息,q些域主要描q服务器的信息和Request-URIq一步的信息。响应头域包含Age?Location、Proxy-Authenticate、Public、Retry-After、Server、Vary、Warning、WWW- Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域Q一般将?x)作为实体头域处理?

典型的响应消息:(x)


HTTP/1.0200OK
Date:Mon,31Dec200104:25:57GMT
Server:Apache/1.3.14(Unix)
Content-type:text/html
Last-modified:Tue,17Apr200106:46:28GMT
Etag:"a030f020ac7c01:1e9f"
Content-length:39725426
Content-range:bytes554554-40279979/40279980
上例W一行表CHTTP服务端响应一个GETҎ(gu)。棕色的部分表示响应头域的信息,l色的部分表C通用头部分,U色的部分表C实体头域的信息?

Location响应?

Location响应头用于重定向接收者到一个新URI地址?

Server响应?

Server响应头包含处理请求的原始服务器的软g信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序?

实体

h消息和响应消息都可以包含实体信息Q实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括Allow、Content- Base、Content-Encoding、Content-Language、Content-Length、Content-Location?Content-MD5、Content-Range、Content-Type、Etag、Expires?Last-Modified、extension-header。extension-header允许客户端定义新的实体头Q但是这些域可能无法未接受方识别。实体可以是一个经q编码的字节,它的~码方式由Content-Encoding或Content-Type定义Q它的长度由Content- Length或Content-Range定义?

Content-Type实体?

Content-Type实体头用于向接收Ҏ(gu)C实体的介质cdQ指定HEADҎ(gu)送到接收方的实体介质cdQ或GETҎ(gu)发送的h介质cdContent-Range实体?

Content-Range实体头用于指定整个实体中的一部分的插入位|,他也指示了整个实体的长度。在服务器向客户q回一个部分响应,它必Lq响应覆盖的范围和整个实体长度。一般格式:(x)

Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth
例如Q传送头500个字节次字段的Ş式:(x)Content-Range:bytes0-499/1234如果一个http消息包含此节Q例如,对范围请求的响应或对一pd范围的重叠请求)QContent-Range表示传送的范围QContent-Length表示实际传送的字节数?

Last-modified实体?

Last-modified实体头指定服务器上保存内容的最后修订时间?

Q{于http://jacky-zhang.javaeye.com/blog/150052Q?

冰浪 2009-04-09 09:24 发表评论
]]>
J2ME中文的支持问?/title><link>http://www.tkk7.com/bingle/archive/2009/04/09/264575.html</link><dc:creator>冰浪</dc:creator><author>冰浪</author><pubDate>Thu, 09 Apr 2009 01:22:00 GMT</pubDate><guid>http://www.tkk7.com/bingle/archive/2009/04/09/264575.html</guid><wfw:comment>http://www.tkk7.com/bingle/comments/264575.html</wfw:comment><comments>http://www.tkk7.com/bingle/archive/2009/04/09/264575.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/bingle/comments/commentRss/264575.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/bingle/services/trackbacks/264575.html</trackback:ping><description><![CDATA[          在用MotoJ2SDKq行J2ME应用E序的开发,l常?x)遇C文的昄Q存储,传输和编码的问题。首先要?88手机上开发KjavaE序Ӟ对于中文的支持情冉|所了解?<br />           中文的支持有三种~码方式Q?<br />           QISO10646 and ISO8859_1 ~码格式Q?<br />           QUTF8~码格式Q?<br />           QUNICODE <br />           下面我们来看一下各U不同的~码方式有什么区别。在目录Text下有三个.txt文gQ它们是分别用ANSI、UNICODE、UTF8方式~码的一D中文,内容?#8220;摩托|拉”。我们用UltraEdit分别打开三个文gQƈ且用HEX方式览Q可以发玎ͼ(x) <br />           1. ANSI方式?6q制数据?<br />           C4,A6,CD,D0,C2,DE,C0,AD, <br />           其中每个中文占两个字节,q且每个字节都大?xA0 <br />           2. UNICODE方式?6q制数据?<br />           FFQFEQ?9Q?4Q?8Q?2Q?7Q?FQC9Q?2 <br />           其中头两个字?#8220;FFQFE”是固定的Q表C文本按照UNICODE~码Qƈ且随后ؓ(f)每个中文占两个字节?<br />           3. UTF8方式?6q制数据?<br />           EF,BB,BF,E6,91,A9,E6,89,98,E7,BD,97,E6,8B,89 <br />           其中?个字?#8220;EF,BB,BF”是固定的Q表C文本按照UTF8~码Qƈ且随后ؓ(f)每个中文?个字节?<br /> <br />           但是Q仅了解q些Q对于开发有关中文的应用E序q是不够的。如何能够保证正的传输和存储中文才是根本目的。经常有些开发者会(x)遇到中文无法存储Q以?qing)经q网l传输后得到的是q的问题。这是因为,J2ME中通常是不能对中文直接q行存储和传输的Q要q行一定的转换。在Hopen的J2ME论坛中,有h提到q样的方法,即用以下两个函数把字W串先{成byte 数组后在写入数据库,在读出时也要先把byte数组转换成字W串Q再q行昄{操作?<br />           public static String byte2string(byte[] b,int offset,int len ) <br />           { <br />           try{ <br />           ByteArrayInputStream bais = new ByteArrayInputStream(b,offset,len); <br />           DataInputStream inputstream = new DataInputStream( bais ); <br />           return inputstream.readUTF(); <br />           }catch(IOException e){return null;} <br />           } <br />           public static byte[] string2byte(String s) <br />           { <br />           try{ <br />           ByteArrayOutputStream baos = new ByteArrayOutputStream(); <br />           DataOutputStream outputstream = new DataOutputStream(baos); <br />           outputstream.writeUTF( s ); <br />           return baos.toByteArray(); <br />           }catch(IOException e){return null;} <br />           } <br /> <br />           l过试验Q发现这是一U简单有效的Ҏ(gu)Qƈ且同样用于UDP传输中文数据Q即再传输前先{换成byte数组Q接收后把byte数组再{换成字符串显C。在目录UTFTest中,我做了一个简单的实例。UTFSendTest.java中,通过TextBox输入一D要传输的中文, <br />           String strText=mainScreen.getString(); <br />           然后定义一个byte数组Q?<br />           byte[] bText = new byte[100]; <br />           然后把要发送的字符串利用前面的函数转换成byte数组Q以便进行传?<br />           bText = string2byte(strText); <br />           int length = bText.length; <br />           最后把转换后的byte数组数据发送到Server端, <br />           dc = (DatagramConnection)Connector.open(destAddr); <br />           Datagram dobject = dc.newDatagram(bText,length,destAddr); <br />           dc.send(dobject); <br />           在Server端的UTFTest.java中做一个逆过E即可, <br />           dc = (DatagramConnection)Connector.open("datagram://:"+ port); <br />           Datagram dobject; <br />           byte[] bReceive = new byte[100]; <br />           dobject = dc.newDatagram(dc.getMaximumLength()); <br />           dc.receive(dobject); <br />           bReceive = dobject.getData(); <br />           String strReceive = byte2string(bReceive,0,bReceive.length); <br />           mainScreen.setString("已收?"+strReceive); <br /> <br />           现在g有了一个权宜之计,臛_可以q行有关中文的操做了。但是有关中文的问题q没有彻底的说清楚。还有一个经常提到的问题Q就是ؓ(f)什么不能象昄英文一P用System.out.println(strReceive); 来显CZD中文字W串变量呢?q一点对于本来就不直观的调试界面来说也是十分必要的,开发者要l常通过q种方式来验证中文是否读取和传输正确。而实际上Q我们看到的只是一串无奈的“Q?Q?#8221;。因此在MotoJ2SDK中,直接?<br />           System.out.println ("中文"); <br />           或者是QString testString = new String("中华人民共和?); <br />           System.out.println(testString); <br />           通常是不可行的。如何才能保证在模拟器界面和system.out中都能正显CZ文呢Q下面我们以finalUDP目录中的UDPServer和UDPClientZ来分析一下?<br />           如果采用上面的方法,利用函数byte2stringQ)?string2byteQ)Q在q行传输之前都{换成Byte数组的格式,?UTF8的编码方式,可以得到正常的传输,Client端发?#8220;发送摩托罗?#8221;QServer端收到后发出“q回摩托|拉”QClient端接收到后显C在模拟器手机屏q上Q但是发送和接收中文字符串用System.out.printlnQ)Ӟ都是“Q?Q?#8221;?<br />           下面对程序做如下改动QServer端受?#8220;发送摩托罗?#8221;后,要发?#8220;q回摩托|拉”。但是这ơ不采用 <br />           static final String replyMsg=”q回摩托|拉”; <br />           byte[] bText = new byte[100]; <br />           bText = string2byte(replyMsg); <br />           而是分别用bText =replyMsg.getBytes(); <br />           ?bText =replyMsg.getBytes("ISO10646"); <br />           ?bText =replyMsg.getBytes("ISO8859_1"); <br />           把待发字W串转换成字W数l,在Client端接收时不用以前的方式:(x) <br />           dc.receive(dobject); <br />           bReceive = dobject.getData(); <br />           receiveMsg = byte2string(bReceive,0,bReceive.length); <br />           而是直接采用 <br />           dc.receive(receiveData); <br />           receiveMsg = new String(receiveData.getData(),0,receiveData.getLength()); <br />           然后再把接收到字W串昄输出Qؓ(f)了细致分析接受到的字W数l每个元素的|用如下方式读出ƈ昄Q?<br />           bReceive=receiveMsg.getBytes(); <br />           for(int i=0;i<bReceive.length;i++) <br />           System.out.println("rcv"+i+":"+bReceive[i]); <br />           l过试验QbText =replyMsg.getBytes();三种不同的参数情况,试验l果如下表所C:(x) <br /> <br /> <br /> <br />           参数情况 接收到的数组 元素情况 接收端模拟器 屏幕昄情况 接收端system.out 昄情况 <br />           Void ?2个bytesQ每个汉字对?个bytesQ?<br />           q且值即为各自ANSI~码|例如“q?#8221;对应0xB7Q?xB5  q 正常 <br />           "ISO10646" Java.io.unSupportedEncodingException:ISO10646     <br />           "ISO8859_1" ?个元素,每个均ؓ(f)0x3FQ?即ؓ(f)“Q?<br /> <br /> Q{于http://jacky-zhang.javaeye.com/blog/148245Q? <img src ="http://www.tkk7.com/bingle/aggbug/264575.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/bingle/" target="_blank">冰浪</a> 2009-04-09 09:22 <a href="http://www.tkk7.com/bingle/archive/2009/04/09/264575.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>j2me优化U密http://www.tkk7.com/bingle/archive/2009/04/09/264574.html冰浪冰浪Thu, 09 Apr 2009 01:18:00 GMThttp://www.tkk7.com/bingle/archive/2009/04/09/264574.htmlhttp://www.tkk7.com/bingle/comments/264574.htmlhttp://www.tkk7.com/bingle/archive/2009/04/09/264574.html#Feedback0http://www.tkk7.com/bingle/comments/commentRss/264574.htmlhttp://www.tkk7.com/bingle/services/trackbacks/264574.html *只在有h(hun)值的地方优化
*用profiler来找要优化的地方
*在具体的讑֤上profiler无能为力Q在g上用System timer
*在于用低U技术之前,L先研I你的代码ƈ且试着改进法
*l图是慢的,所以尽量节俭地使用囑Ş调用
*在可以减绘制区域的地方使用setClip()
*可能的把东西放到@环之?
*拼命地预先计和暂存
*字符串带来垃圾,垃圾不好Q所以用StringBuffers来代?
*什么都不假?
*可能׃用static finalҎ(gu)Q避免synchronized修饰W?
*传递尽可能的参数到经常调用的Ҏ(gu)
*如果可能Q完全地L函数调用
*解开循环
*?的幂的乘除运用位移q算代替
*你可以用位q算W代替取模运来实现循环
*试着用零来代替和其他数的比较
*数组讉K比C要慢Q所以暂存数l元?
*消去公共的子表达?
*局部变量要比引用变量快
*如果可以callSerially()׃要wait()
*在switch()中用小的变量作选项
*查定Ҏ(gu)学库q且优化?
*拆开嵌套的FP调用来减类型{?
*除法比乘法慢Q所以用乘于倒数来代曉K?
*用用过和测试过的算?
*Z保护可移植性,心C用私有高性能API   

Q{于http://jacky-zhang.javaeye.com/blog/186741Q?

冰浪 2009-04-09 09:18 发表评论
]]>
j2me游戏引擎E序l构http://www.tkk7.com/bingle/archive/2009/04/09/264572.html冰浪冰浪Thu, 09 Apr 2009 01:15:00 GMThttp://www.tkk7.com/bingle/archive/2009/04/09/264572.htmlhttp://www.tkk7.com/bingle/comments/264572.htmlhttp://www.tkk7.com/bingle/archive/2009/04/09/264572.html#Feedback0http://www.tkk7.com/bingle/comments/commentRss/264572.htmlhttp://www.tkk7.com/bingle/services/trackbacks/264572.html阅读全文

冰浪 2009-04-09 09:15 发表评论
]]>
开发J2ME联网应用E序http://www.tkk7.com/bingle/archive/2009/04/09/264571.html冰浪冰浪Thu, 09 Apr 2009 01:13:00 GMThttp://www.tkk7.com/bingle/archive/2009/04/09/264571.htmlhttp://www.tkk7.com/bingle/comments/264571.htmlhttp://www.tkk7.com/bingle/archive/2009/04/09/264571.html#Feedback0http://www.tkk7.com/bingle/comments/commentRss/264571.htmlhttp://www.tkk7.com/bingle/services/trackbacks/264571.html阅读全文

冰浪 2009-04-09 09:13 发表评论
]]>
CMNET和CMWAP|络q接http://www.tkk7.com/bingle/archive/2009/04/09/264569.html冰浪冰浪Thu, 09 Apr 2009 01:11:00 GMThttp://www.tkk7.com/bingle/archive/2009/04/09/264569.htmlhttp://www.tkk7.com/bingle/comments/264569.htmlhttp://www.tkk7.com/bingle/archive/2009/04/09/264569.html#Feedback0http://www.tkk7.com/bingle/comments/commentRss/264569.htmlhttp://www.tkk7.com/bingle/services/trackbacks/264569.html阅读全文

冰浪 2009-04-09 09:11 发表评论
]]>
手机|络应用客户端Y件开发实늮?/title><link>http://www.tkk7.com/bingle/archive/2009/03/06/258139.html</link><dc:creator>冰浪</dc:creator><author>冰浪</author><pubDate>Fri, 06 Mar 2009 02:40:00 GMT</pubDate><guid>http://www.tkk7.com/bingle/archive/2009/03/06/258139.html</guid><wfw:comment>http://www.tkk7.com/bingle/comments/258139.html</wfw:comment><comments>http://www.tkk7.com/bingle/archive/2009/03/06/258139.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/bingle/comments/commentRss/258139.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/bingle/services/trackbacks/258139.html</trackback:ping><description><![CDATA[     摘要: 说到Ud|络应用Q前几年大家首先惛_的就是WAP应用。最q随着市场上手机的可编E能力越来越强,手机软g开发^台和产业铄逐渐成熟Q手Z的网l应用Y仉渐多了hQ如UdQQ、PICA、掌讯通等{。这些客L(fng)软g凭着丰富的应用、以用户Z心的体验、良好的业务感知度逐渐成ؓ(f)WAP业务之后的又一c重要网l应用。目前的Ud软g开发已l逐渐从传l的嵌入式开发中相对独立出来, 主要指手Z的上层应用Y件开发,最q也成ؓ(f)了Y件行业的新兴热点?<br> <br> 作ؓ(f)业务q营的手机网l应用客L(fng)软g要求能够部v到大量的手机l端Qƈ注重和网l服务器端业务的l合Q目前这斚w的开发参考资料还比较?yu)。本文以手机报项目ؓ(f)基础Q简单探讨一下手机网l应用客L(fng)软g开发实践中的几个关键问题,希望Ҏ(gu)q入者有所帮助。假设我们需要开发一个高可用的手机网l应用客L(fng)软gQ用于在U定购和阅读?sh)子报刊业务Q覆盖目前移动梦|用户中占有率最高的几十ƾ手机,下面l合KJava开发介l一下我们的一些实践心得?<br>  <a href='http://www.tkk7.com/bingle/archive/2009/03/06/258139.html'>阅读全文</a><img src ="http://www.tkk7.com/bingle/aggbug/258139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/bingle/" target="_blank">冰浪</a> 2009-03-06 10:40 <a href="http://www.tkk7.com/bingle/archive/2009/03/06/258139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ZJ2ME的手|程?/title><link>http://www.tkk7.com/bingle/archive/2009/02/19/255649.html</link><dc:creator>冰浪</dc:creator><author>冰浪</author><pubDate>Thu, 19 Feb 2009 13:33:00 GMT</pubDate><guid>http://www.tkk7.com/bingle/archive/2009/02/19/255649.html</guid><wfw:comment>http://www.tkk7.com/bingle/comments/255649.html</wfw:comment><comments>http://www.tkk7.com/bingle/archive/2009/02/19/255649.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/bingle/comments/commentRss/255649.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/bingle/services/trackbacks/255649.html</trackback:ping><description><![CDATA[     摘要: 随着国内3G的启动,C代移动通信大潮已经到来。技术的q步使得无线|络取得不错的发展,Ud互联|巨大前景也随着昄。无U网l速度的提高,催生大量的手|应用程序。手|功能的强化Q得手机应用更具h(hun)|q一步扩展了手机功能?nbsp; <a href='http://www.tkk7.com/bingle/archive/2009/02/19/255649.html'>阅读全文</a><img src ="http://www.tkk7.com/bingle/aggbug/255649.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/bingle/" target="_blank">冰浪</a> 2009-02-19 21:33 <a href="http://www.tkk7.com/bingle/archive/2009/02/19/255649.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://dazngt.com" target="_blank">Ļ߿˶Ƭ</a>| <a href="http://56kaifa.com" target="_blank">ƷƷŮ߹ۿ </a>| <a href="http://kk600700.com" target="_blank">Ļavѷdvd</a>| <a href="http://uu313.com" target="_blank">Ұѹۿ</a>| <a href="http://kmc19.com" target="_blank">ȫ»ɫؼվ</a>| <a href="http://tqdrhj.com" target="_blank">aƵƵ</a>| <a href="http://jnyygs.com" target="_blank">þ޾Ʒ11p</a>| <a href="http://kfdingrui.com" target="_blank">þþƷ</a>| <a href="http://xxxxyz.com" target="_blank">ѹۿ</a>| <a href="http://binz132.com" target="_blank">þĻƷѩ</a>| <a href="http://chinacmk.com" target="_blank">ɫɫwww</a>| <a href="http://saohu533.com" target="_blank">ƵƷһ</a>| <a href="http://www456788.com" target="_blank">պһƵ</a>| <a href="http://jgc528.com" target="_blank">һ</a>| <a href="http://yongyihongze.com" target="_blank">ؼëƬƵ</a>| <a href="http://5gg1.com" target="_blank">ȫëƬ߲</a>| <a href="http://51jingpai.com" target="_blank">߲޵һĻ</a>| <a href="http://uiui6.com" target="_blank">avպavվ</a>| <a href="http://shandonghj.com" target="_blank">þùƷ</a>| <a href="http://qimiaodh.com" target="_blank">һ</a>| <a href="http://19b1.com" target="_blank">޾Ʒ˾þ</a>| <a href="http://655060.com" target="_blank">˳ƵƵ</a>| <a href="http://22youjizz.com" target="_blank">þþþþùƷ </a>| <a href="http://3x79.com" target="_blank">žƷƵվ</a>| <a href="http://66keke.com" target="_blank">װ׹Ƶ</a>| <a href="http://bjjs365.com" target="_blank">þþƷ޾Ʒɫ</a>| <a href="http://dd5566.com" target="_blank">һ˿Ƶwww߸嶯</a>| <a href="http://hongyue8.com" target="_blank">ӰԺδʮվ</a>| <a href="http://www876444.com" target="_blank">av޹av</a>| <a href="http://xa69.com" target="_blank">ѾƷþþþþĻ</a>| <a href="http://dd99com.com" target="_blank">ѹۿվ߲</a>| <a href="http://8mav938.com" target="_blank">޵һƷ</a>| <a href="http://55xxb.com" target="_blank">ŮڵƵ</a>| <a href="http://22youjizz.com" target="_blank">պһƵ</a>| <a href="http://4794d.com" target="_blank">AVר</a>| <a href="http://yy7699.com" target="_blank">þƵվ</a>| <a href="http://77sosoo.com" target="_blank">һɫþۺ޾Ʒ</a>| <a href="http://zanyoo.com" target="_blank">Ѹ߹ۿ</a>| <a href="http://118762.com" target="_blank">ҹҹƷƵ</a>| <a href="http://yakonet.com" target="_blank">Ƶۿ</a>| <a href="http://93qsgy.com" target="_blank">޻ɫѵӰ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>