当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:12:00  来源:本站整理

初学J2ME的一点经验[Java编程]

赞助商链接



  本文“初学J2ME的一点经验[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

与其说是学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;
public void 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 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的一点经验[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 初学j2me必读 网友学习笔记
  • 初学J2ME的一点经验
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .