您好,登录后才能下订单哦!
这篇文章主要讲解了“初学J2ME需要注意什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“初学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需要注意什么”的内容了,经过本文的学习后,相信大家对初学J2ME需要注意什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。