智能测试器开发笔记
发表于 十一月 6th, 2007 由 heart5
| 热度: |
在j2medev看到2004年春天的文章才发现自己的停滞期有多长,还是记下来的好,可以总结提高、备忘和提醒!
2007年11月28日
- 完善界面功能,在功能区分别显示1、2、3等数字,如果是触摸屏点击生效,如果不是的话按下相应的键也行。处理的时候又复习了switch case的用法。因此是每次重画背景,所以程序可以实现屏幕自适应(全屏和窗口模式)。
- 测试短消息的时候发现短信的存储规律,单个短信可以存储70个汉字(140个ascii码),两个短信挂接则只能存储136个,三个短信挂接则只能为212个,归纳出公式为n×70-n×2-2。真机测试中短信发送功能似乎不是很正常,有时候收不到短信。原因未知。
- 为了好玩,增加了播放音乐的功能。J2ME的媒体播放框架很方便,很轻松就实现了。
2007年11月21日 n多升级和心得,呵呵,结果比较满意
- 升级MyCanvas使其可以接收字符串输入,彻底替换掉所有的高级UI。过程中碰到了一个问题,因为有些测试信息(比如Display方面的)需要在MIDLet中获取,所以me就在MyCanvas中构建了一个SmarTest_Happy的实例,但运行时笔直出错,调试发现提示权限不够。分析发现在J2ME程序中不允许存取调用MIDlet实例,仔细想想也有道理,但me的问题需要解决啊。后来通过在MyCanvas中增设相关测试信息域的方式解决了问题,在MIDlet的start过程中对其进行设定就行了。调试时发现“平台信息”等运作良好,但JSR、震动和屏幕闪烁等无效,不知道是为什么。后来只好为MyCanvas增加了“测试”Command(显性调用相关方法)才解决问题,美中不足的是Command增加到了三个,默认启动了菜单。
- 把屏幕划为功能区和信息区,其中信息区可以直接使用已经调试成功的MyCanvas主功能(把顶、左、右、下坐标定义好就行了),但功能区需要每次先在fullimage中画好。把左侧(20px宽)划分为8个方块,分别进行6项测试、About信息显示以及全屏切换,底部(40px宽)显示当前时间等信息。
- 对字体设定进行了实验,实现功能区和信息区字体不同的设计目标。只是每次makeBackgroud时都需要重新构建Font对象,Handle有很多,但愿JVM的垃圾回收效率很高啊。
- 调试时发现需要滚动时启动的线程没有相应的进行终止,解决之,免得无头“苍蝇”满天飞。
- 成功实现无线短消息(WMA)发送短信的功能,现在“智能测试器”可以自动给me发测试信息了。为了避免阻塞,启用了单独的线程处理短消息发送问题,在me的Motorola A780上测试成功。
- 真机调试时发现其他类型手机配置下生成的jar在me的A780下无法运行,后来发现是配置设定问题(比如是MIDP1.0还是2.0啊还是2.1之类的),后来为了方便,把Netbeans“聪明”的帮me自动添加的其他配置全删除了,只保留了一个DefualtColorPhone,这样应该各种手机都可以正常运行了。在两款真机上进行了测试:Motorola A1200,运行正常,其他测试项目结果正常,但在JSR的测试方面信息反常(比如号称A1200不支持WMA等JSR);Nokia 7610,无法安装。
- 彻底解决了英文单词折行的问题:如果行尾有两个及以下的字母则此单词完全折到下行去,如果还有三个及以上字母则添加连接符“-”。
- 试用了CVS的标记和分支功能,需要继续探讨。
2007年11月18日
- 终于实现了自动滚屏,在真机上测试成功。原因在于从Canvas中的paint方法中引出Graphics对象后对其进行处理无法实时更新,解决的办法是创建一个可修改的Image对象,把需要的内容画上去,然后调用repaint方法,在paint方法中每次把该Image画到屏幕上就OK了。不知道MIDP2.0中的GameCanvas是不是也是这样的实现方法。
- 实现了英文单词折行时自动添加短横线“-”的功能。方法是扫描行尾两个是否都是字母,如果是则添加连接符。
2007年11月17日
- 增加了对字符串中回车符的识别处理。'\n'只是一个特殊的字符,char类型;貌似Font对stringWidth的处理是自动忽略掉了控制字符。
- 调试时发现处理文本时调用了两次,一次是Canvas显示的时候,一次是Paint的时候。解决办法是去掉显示时的调用,在Paint中进行判断,显示空间不够的话再调用Thread用来滚行。
- 对代码进行注释,方便升级程序时还原设计思路。看来还是要养成即时注释的习惯。
2007年11月9日
- 通过Thread实现文字滚动,但在A780的模拟器(MOTO官方提供的)中测试成功,可是拿到真机上就不会自动滚屏了,另外在WTK2.2.1中测试(也是模拟器)也不能滚屏,和真机上效果一样。原因正在分析中!
- 增加了对显示区域是否能容纳当前需显示文字的判断,避免不需要滚屏的时候滚屏,那不是纯粹的浪费嘛。
- 结合Netbeans IDE中自动生成的代码重新写了个MIDlet,感觉很好,对其实现流程和MIDlet的逻辑加深了了解。
- 把那个自己画的Canvas模块化了,可以接受长字符串作为参数然后显示,这下可以丢掉MIDP的高级UI了(丑的要命),更为程序的界面美化提供了可能。
- 测试一直用的是中文,后来才发现对英文单词总是在行末被折断,汗,好丑。实现英文分词是必须的,否则……下步搞定。
- 调试非常重要,开发期间不要吝惜使用System.out.println等语句。
- 对代码进行版本管理了,其实Netbeans IDE中使用CVS还是很方便的。
2007年11月7日
在Canvas上显示长字符串的思考和分析
- 目标:让字符串优美的现实在Canvas上。
- 要求:会根据边界(上下左右)自动折行并不丢字;如果显示区域容纳不下,会自动向下平滑滚动。
- 思路:先根据边界要求和Font高度遍历字符串,拆分成字符串数组;如果高度合适,直接显示,否则显示首页后自动向下滚动,滚动到尾页时停止(此时文字应该满屏)。
- 关键点:如果使用setclip不知道会不会影响背景图像;刷屏时可能产生抖动或其他情况,视觉感受不好,滚动时应该1pix、1pix的向下走;也可以考虑把字符串排版好后生成图像,把整个图像慢慢向上拉。
2007年11月06日
- 终于自己画了Canvas实现了全屏,不过在显示既有图片的时候出现了问题,花了n久功夫都无法正常显示,但画线条和几何图形又正常,迫不得已上网求救。后来静下心来逐条梳理:Form和Alert中的图片都能正常显示,说明系统和机器都没有问题;加入调试语句发现原来是找不到图片的路径,和Netbeans自动生成的代码比较才发现原来是把图片的路径搞错了,应该是/res/apple_new.jpg。教训:遇事勿急,冷静对待,系统分析,然后动手而不是动嘴;另外就是没有想清楚之前最好不要动手,即使解决了也是瞎碰的,没意义,何况那样的话解决掉的可能性本来就很低。
- 写了个在Canvas上写长字符串的函数,可以自动折行,呵呵,心里很是得意。不过美中不足的是掺杂了标点符号的行和其文本行尾端总是对不齐,坑坑洼洼的;另外就是暂时没有超过一面的更长字符串进行处理。
- 覆盖了Canvas中触摸和按键事件的处理函数,使全屏状态能恢复成窗口状态以回到程序的主操作界面中去。
相关博文

[...] 另附上“开发笔记”(动态更新),欢迎同好讨论交流。 [...]