盾怪网教程:是一个免费提供流行杀毒软件教程、在线学习分享的学习平台!

初学J2ME的一些经验

时间:2024/10/25作者:未知来源:盾怪网教程人气:

[摘要]Item.LAYOUT_NEWLINE_BEFORE,   "第二张图片");   catch(Exception err) ...
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 Exception
  java.lang.NullPointerException
  java.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()只是程序运行的切入点,对象和类的构造依然还是由构造函数完成。一个提示,那真的是构造函数吗?

  一个很明显但是很容易被忽略的错误, public void ImageItemDemo(),它不是构造函数,甚至连构造函数的重载都不是,理由?限制了void类型。c++学了快1年了,确实没有想过也没有注意过这个问题,直接后果就是这样,类在构造时候不会执行它,那么其中的mainform自然不会被实例化,而依然只是一个引用,何以谈的上操作?

  改的方法很容易,把void去掉就可以了,就这么一个简单的问题,耗了我一天,最大的感觉就是自己学的不够深,对理论观点依旧不够明确,所以写下它引以为戒。


关键词:初学J2ME的一些经验




Copyright © 2012-2018 盾怪网教程(http://www.dunguai.com) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版