选择显示字体大小

初学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;

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_2item.layout_expanditem.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去掉就可以了,就这么一个简单的问题,耗了我一天,最大的感觉就是自己学的不够深,对理论观点依旧不够明确,所以写下它引以为戒。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons