站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题[菜鸟问题]各位高手帮我看下出现异常:java.lang.NullPointerException是怎么回事啊(JB中编译通过)

[菜鸟问题]各位高手帮我看下出现异常:java.lang.NullPointerException是怎么回事啊(JB中编译通过)

摘要: [菜鸟问题]各位高手帮我看下出现异常:java.lang.NullPointerException是怎么回事啊(JB中编译通过)


=============
ok3.java
=============

package ok3;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;


public class ok3 extends MIDlet {
private Canvas canvas;
private Display display;

static ok3 instance;
ok3Displayable displayable = new ok3Displayable();
public ok3() {
instance = this;
}

public void startApp() throws MIDletStateChangeException {
display = Display.getDisplay(this);
canvas = new ok3Displayable();
display.setCurrent(canvas);

}

public void pauseApp() {
}

public void destroyApp(boolean bool) {
}

public static void quitApp() {
instance.destroyApp(true);
instance.notifyDestroyed();
instance = null;
}

}



==================
ok3Displayable
==================

package ok3;

import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import java.util.*;
import java.io.*;

public class ok3Displayable extends Canvas implements CommandListener {


public ok3Displayable() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}

private void jbInit() throws Exception {
setCommandListener(this);
addCommand(new Command("Exit", Command.EXIT, 1));
}

public void commandAction(Command command, Displayable displayable) {
if (command.getCommandType() == Command.EXIT) {
ok3.quitApp();
}
}
private Image kk = null;
public void ok3Displayable(){
try {
kk = Image.createImage("/ohyeah.png");
}
catch(IOException e) {
e.printStackTrace();
}
}
protected void paint(Graphics g) {
g.setColor(221, 71, 71); // red
g.drawArc(50,20,25,25,0,360);
g.fillRect(23, 33, 30, 80);

g.drawImage(kk,20,20,Graphics.LEFT | Graphics.TOP );

g.setColor(255, 255, 255); // red
g.drawString("hello !",10,20,0);
}
}


JB2006下编译通过,但是NOKIA7210模拟器环境运行时出现“Application Eorrer”,点击“Details”出现异常报告:java.lang.NullPointerException

请问我到底哪儿出了问题呢……


private Canvas canvas;


ok3Displayable displayable = new ok3Displayable();

canvas = new ok3Displayable();

----------------------------------------
程序写成这样也能编译过去?????


呵呵,理论上来说是可以编过去的,只是我想空指针不一定在这
应该debug看看到底那里空了


对象没有初始化就使用了


同意楼上


楼主可以加入此语句:
例如test对象,test= new Test(null);


请问二楼的朋友k7sem兄,我的程序这样写是为什么不行呢?我是菜鸟,你就简单说说就好了~

private Canvas canvas;
ok3Displayable displayable = new ok3Displayable();
canvas = new ok3Displayable();

另外谢谢5、6楼的朋友ty001给我支招,但是我还是想问一下这一步是做什么用的呢?
另外你说加入此语句,那么应该加在哪里呢?

十分抱歉提出这种初级死了的问题……但这的确是我目前最大的问题!
再次谢谢各位了!


这一句当然是加在你声明对象的地方啦
另外你的代码里面有好几个对象都没有初始化就使用了
你单步调试一下就会发现不少问题


对象没有初始化就使用了


感谢ty001兄一直关注我的问题,现在我把程序简化了一下使它看起来不会太长,并且把没用的东西都删了。各位老大这回再帮我看看,到底是哪个对象没有初始化或者错误使用~~~~

=========
ok3.java
=========

package ok3;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class ok3 extends MIDlet {

private Canvas canvas;
private Display display;

public void startApp() throws MIDletStateChangeException {
display = Display.getDisplay(this);
canvas = new ok3Displayable();
display.setCurrent(canvas);
}
public void pauseApp() {}
public void destroyApp(boolean bool) throws MIDletStateChangeException {
}
}

====================
ok3Displayable.java
====================

package ok3;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import java.io.*;

public class ok3Displayable extends Canvas {

private Image kk;
public void ok3Displayable(){
try {
kk = Image.createImage("/ohyeah.png");
}
catch(IOException e) {e.printStackTrace();}
}

protected void paint(Graphics g) {
g.drawImage(kk,20,20,Graphics.LEFT | Graphics.TOP );
}

}

谢谢各位了!


你的ok3Displayable()的构造没有被执行,所以kk这个对象没有初始化,就报错了。具体没执行的原因,尚不清楚,呵呵。


原因找到了
你的ok3Displayable 构造器前面竟然用void来修饰,虚拟机肯定是当成一个方法来处理的。并不是当成构造器去执行,所以构造没有被执行。去掉void关键字,问题解决了。


k7sem兄太棒了!真的是这样!太谢谢你了!!


问题已解决!


↑返回目录
前一篇: 有谁在MIDP2.0使用SSL测试通过?
后一篇: 有关List的一个简单问题!!!!