J2ME手机程序的图片显示

我在调试一个关于在手机上显示图片的程序,分成两段:1、MainCanvas.java部分内容如下:importjava.io.IOException;importjava... 我在调试一个关于在手机上显示图片的程序,分成两段:

1、MainCanvas.java部分

内容如下:

import java.io.IOException;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

public class MainCanvas extends Canvas {

public Image m_Image;
MainCanvas(){
try{

m_Image=Image.createImage("/IM.png");

}
catch(IOException e){

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

}

2、MyCartoonMidlet.java部分

内容如下:

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

public class MyCartoonMidlet extends MIDlet {

public MainCanvas m_MainCanvas;
public MyCartoonMidlet() {
// TODO 自动生成构造函数存根
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO 自动生成方法存根

}

protected void pauseApp() {
// TODO 自动生成方法存根

}

protected void startApp() throws MIDletStateChangeException {
m_MainCanvas=new MainCanvas();
Display.getDisplay(this).setCurrent(m_MainCanvas);
while(true){
m_MainCanvas.repaint();
}

}

}

过程是调用目录下的一个叫做 IM.PNG的文件。在调试过程中,编译器不断报Java.lang.NullPointerException 的错误。

应该怎样修改?是环境问题还是程序问题?我怀疑是图片路径问题,可是我把图片放在res下也不行,verified\classes下也不行!!!对我这样的初学者真是一个打击!求高手指点!!!
展开
 我来答
cobfly
2011-05-01 · TA获得超过100个赞
知道小有建树答主
回答量:100
采纳率:0%
帮助的人:90.1万
展开全部
在你原有的基础上修改
1、MainCanvas.java部分

内容如下:

import java.io.IOException;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

public class MainCanvas extends Canvas implements Runnable{

public Image m_Image;
MainCanvas(){
try{

m_Image=Image.createImage("/IM.png");

}
catch(IOException e){

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

public void run(){
while(true){
repaint();
}
}

}

2、MyCartoonMidlet.java部分

内容如下:

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

public class MyCartoonMidlet extends MIDlet {

public MainCanvas m_MainCanvas;
public MyCartoonMidlet() {
// TODO 自动生成构造函数存根
m_MainCanvas=new MainCanvas();
Display.getDisplay(this).setCurrent(m_MainCanvas);
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO 自动生成方法存根

}

protected void pauseApp() {
// TODO 自动生成方法存根

}

protected void startApp() throws MIDletStateChangeException {
}

}

错误的原因有两个:在入口类得构造函数里调用 此方法Display.getDisplay(this).setCurrent(m_MainCanvas);
重写的Canvas类需要实现Runnable接口
在run方法里调用repaint();
更多追问追答
追问
你这个程序都无法编译通过。
追答
错误信息是什么?说得更详细点。。。
BigYuan
2011-05-01
知道答主
回答量:4
采纳率:0%
帮助的人:6749
展开全部
拜托写东西要程序化
package picture;

import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
/**
* 主类,每个工程一样,填充构造方法
* @author Administrator
*
*/
public class PictureMIDlet extends MIDlet {
public static PictureMIDlet instance;
public Display dis;
public PictureMIDlet() {
instance = this;
dis = Display.getDisplay(this);
dis.setCurrent(new MainCanvas());
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub
}
protected void pauseApp() {
// TODO Auto-generated method stub
}
protected void startApp() throws MIDletStateChangeException {
// TODO Auto-generated method stub
}
}

package picture;

import java.io.IOException;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
/**
* 画布显示图片测试
* @author Micheal
*
*/
public class MainCanvas extends Canvas {
private Image image;
public MainCanvas(){
try {
image= Image.createImage("/images/girl.png");
} catch (IOException e) {
e.printStackTrace();
}
}
protected void paint(Graphics g) {
g.drawImage(image, 0, 0, Graphics.TOP|Graphics.LEFT);
repaint();
}
}
追问
试了你的方法以后,程序没有再报错,可是还是无法显示图片,请问图片应该放到那个目录下?(我尝试的是/res/images/girl.png,不行)。望详细点,我是菜鸟。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Hxuejie
2011-05-03 · TA获得超过167个赞
知道小有建树答主
回答量:97
采纳率:0%
帮助的人:96.7万
展开全部
你的代码我直接导入试了,是可以用的!(但是你的代码。。。就像那个repaint()的入理真的不太好!)
你可以看一下你的图片是不是创建成功!你可以在
try{

m_Image=Image.createImage("/IM.png");

}
这里进行输出一下,看一下m_Image是不是还是空的!这说明图片创建失败,应该是你图片的问题!这样,你在paint()里画图的时候就会出现空指针错(NullPointerException)。
代码可以写成:
你的代码我直接导入试了,是可以用的!(但是你的代码。。。就像那个repaint()的入理真的不太好!)
你可以看一下你的图片是不是他建成功!你修改:
try{

m_Image=Image.createImage("/IM.png");
System.out.println(m_Image);
}
然后看一下你的输出,是不是有空(Null)。这说明是你图片问题!

还有,你的图片可以这么放,没问题!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
齐泽西
2011-05-03
知道答主
回答量:13
采纳率:0%
帮助的人:8.7万
展开全部
你把res加入到项目中没有?
可以图片压进jar软件中。
压缩方法:改后缀为zip后加入
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式