北大青鸟光谷校区

北大青鸟光谷校区

  • 北大青鸟徐东校区
  • 北大青鸟光谷校区
  • 北大青鸟高新校区
  • 荆州青鸟之家
  • 襄阳青鸟之家

17740513250

百日千才

学习J2ME的一点经验

发布日期:2023-03-31来源:武汉北大青鸟武汉校区作者:027hpit

    北大青鸟武汉宏鹏光谷校区:学习J2ME的一点经验

       与其说是学J2ME的经验,倒不如说是类C 语言的一点注意事项,之所以这么说,是因为这个问题是在学J2ME时候发现的,整整折腾了我一天,虽然只是一点小的失误,但是直接后果是程序不断异常,所以我把它写出来,一方面提醒自己,学知识不能浅尝辄止,而应该多问为什么,不知其然还要知所以然,另一方面也告诉更多像我这样初学的朋友不要犯相同的错误。

  下面请看一段代码:

  /*

  *ImageItemDemo.Java

  *

  *Createdon2005年7月24日,下午1:45

  */

  importjavax.microedition.midlet.*;

  importjavax.microedition.lcdui.*;

  /**

  *

  *@author mark

  *@version

  */

  publicclassImageItemDemoextendsMIDletimplementsCommandListener{

  privateCommandexitCommand=newCommand("Exit",Command.EXIT,1);

  privateFormmainform;;

  privateImageItemimg1,img2;

  public voidImageItemDemo(){

  mainform=newForm("ImageItemTest");

  mainform.append("显示各种ImageItem");

  mainform.addCommand(exitCommand);

  mainform.setCommandListener(this);

  }

  publicvoidstartApp(){

  try{

  img1=newImageItem("默认图像控件",

  Image.createImage("/Image.png"),

  Item.LAYOUT_DEFAULT,

  "张图片");

  img2=newImageItem("默认图像控件",

  Image.createImage("/Image.png"),

  Item.LAYOUT_2|Item.LAYOUT_EXPAND|Item.LAYOUT_NEWLINE_BEFORE,

  "第二张图片");

  }catch(Exceptionerr){

  System.out.println("cannotload....");

  }

  mainform.append(img1);

  mainform.append(img2);

  Display.getDisplay(this).setCurrent(mainform);

  }

  publicvoidpauseApp(){

  }

  publicvoiddestroyApp(booleanunconditional){

  }

  publicvoidcommandAction(Commandc,Displayabled){

  if(c==exitCommand){

  destroyApp(false);

  notifyDestroyed();

  }

  }

  }

  这是一个ImageItemt的演示程序,我在实现的前提下加了一点东西导致它异常,异常如下:

  startAppthrewanException

  java.lang.NullPointerException

  java.lang.NullPointerException

  atImageItemDemo.startApp( 64)

  atjavax.microedition.midlet.MIDletProxy.startApp( 7)

  atcom.sun.midp.midlet.Scheduler.schedule( 270)

  atcom.sun.midp.main.Main.runLocalClass( 28)

  atcom.sun.midp.main.Main.main( 116)

  能找到异常原因吗?

  先确定是由startApp抛出空指针异常,其中用到的对象主要有两个,mainform和img1、img2,然而image载入抛出的应该可由catch(Exceptionerr)捕获到,所以基本可以确定是mainform产生的异常,可是问题来了,mainform我已经在构造函数里面实例化了,而且也是类的成员变量,应该随对象存在,可是为什么会异常呢?

  百思不得其解。。。。

  于是把ImageItemDemo()里的代码移到startApp()里面,发现居然实现了,可以确定,就是没有实例化mainform。原因何在?难道是J2ME要先执行startApp才执行构造函数??答案是否定的。startApp()只是程序运行的切入点,对象和类的构造依然还是由构造函数完成。一个提示,那真的是构造函数吗?

关闭

只为了方便您就学 北大青鸟光谷校区 北大青鸟武汉校区

武汉市洪山区珞喻路724号(地铁二号线光谷广场站F口出

Copyright (c) 2006-2023 武汉宏鹏教育咨询有限公司 版权所有 All Rights Reserved.