文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 专题 求职 读书
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» Java » 初学J2ME的一点经验       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: [转载] 初学J2ME的一点经验  ( 查看:316  回复:0 )   
 
飞天兔
助理工程师  点击可查看详细



帖子 198
精华 2
无忧币 2172
积分 2140
阅读权限 40
注册日期 2006-8-27
最后登录 2006-8-31 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2006-8-29 13:30   标题:初学J2ME的一点经验
上一帖 |
与其说是学J2ME的经验,倒不如说是类C++语言的一点注意事项,之所以这么说,是因为这个问题是在学J2ME时候发现的,整整折腾了我一天,虽然只是一点小的失误,但是直接后果是程序不断异常,所以我把它写出来,一方面提醒自己,学知识不能浅尝辄止,而应该多问为什么,不仅知其然还要知所以然,另一方面也告诉更多像我这样初学的朋友不要犯相同的错误。下面请看一段代码:/** ImageItemDemo.java** Created on 2005年7月24日, 下午1:45*/import javax.microedition.midlet.*;import javax.microedition.lcdui.*;/**** @author mark* @version*/public class ImageItemDemo extends MIDlet implements CommandListener{ private Command exitCommand=new Command("Exit",Command.EXIT,1); private Form mainform;; private ImageItem img1,img2; publicvoid ImageItemDemo(){ mainform=new Form("ImageItem Test"); mainform.append("显示各种ImageItem"); mainform.addCommand(exitCommand); mainform.setCommandListener(this); } public void startApp() { try{ img1=new ImageItem("默认图像控件", Image.createImage("/Image.png"), Item.LAYOUT_DEFAULT, "第一张图片"); img2=new ImageItem("默认图像控件", Image.createImage("/Image.png"), Item.LAYOUT_2|Item.LAYOUT_EXPAND|Item.LAYOUT_NEWLINE_BEFORE, "第二张图片"); }catch(Exception err){ System.out.println("can not load...."); } mainform.append(img1); mainform.append(img2); Display.getDisplay(this).setCurrent(mainform); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c,Displayable d){ if(c==exitCommand){ destroyApp(false); notifyDestroyed(); } }}这是一个ImageItemt的演示程序,我在实现的前提下加了一点东西导致它异常,异常如下:startApp threw an Exceptionjava.lang.NullPointerExceptionjava.lang.NullPointerException at ImageItemDemo.startApp(+64) at javax.microedition.midlet.MIDletProxy.startApp(+7) at com.sun.midp.midlet.Scheduler.schedule(+270) at com.sun.midp.main.Main.runLocalClass(+28) at com.sun.midp.main.Main.main(+116)能找到异常原因吗?首先确定是由startApp抛出空指针异常,其中用到的对象主要有两个,mainform和img1、img2,然而image载入抛出的应该可由catch(Exception err)捕获到,所以基本可以确定是mainform产生的异常,可是问题来了,mainform我已经在构造函数里面实例化了,而且也是类的成员变量,应该随对象存在,可是为什么会异常呢?百思不得其解。。。。于是把ImageItemDemo()里的代码移到startApp()里面,发现居然实现了,可以确定,就是没有实例化mainform。原因何在?难道是J2ME要先执行startApp才执行构造函数??答案是否定的。startApp()只是程序运行的切入点,对象和类的构造依然还是由构造函数完成。一个提示,那真的是构造函数吗?一个很明显但是很容易被忽略的错误, publicvoid ImageItemDemo(),它不是构造函数,甚至连构造函数的重载都不是,理由?限制了void类型。c++学了快1年了,确实没有想过也没有注意过这个问题,直接后果就是这样,类在构造时候不会执行它,那么其中的mainform自然不会被实例化,而依然只是一个引用,何以谈的上操作?改的方法很容易,把void去掉就可以了,就这么一个简单的问题,耗了我一天,最大的感觉就是自己学的不够深,对理论观点依旧不够明确,所以写下它引以为戒。
2006-8-29 13:301楼
[ 顶部 ]
     
论坛跳转:  

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号