这段代码那里出现空指针。请教高手。

cenkongded 2008-07-26 11:21:35
java.lang.NullPointerException

这段代码那里出现空指针。


void introduce(int x)
{
String fn;
fn="/";
fn=fn+Integer.toString(x);
fn=fn+".txt";


InputStream in = getClass().getResourceAsStream(fn);

ByteArrayOutputStream s;
s = new ByteArrayOutputStream(); //产生内存数组输出字节流对象变量S
try{
int ch=0;
ch=in.read(); //由输入流对象变量in的read方法以字节为单位来读取文件的内容,读取到文件尾时的值为-1。
while ( ch!= -1 ) {
//如果未读到文件尾把读取的内容写入S变量中,并读取下一字节内容
s.write( ch );
ch=in.read();
}
in.close(); //关闭输入流对象。
} catch (IOException ioe){
System.out.println(ioe.toString());
}
sr = s.toString(); //将S变量转为字符串
try{
s.close(); //关闭输出流对象
} catch (IOException ioe){
System.out.println(ioe.toString());
}




// phone =new TextField(menu.getTitle(), Sr,4000,0);

// ui_form.append(phone);
myCanvas.setTitle("三国演义");
myCanvas.addCommand(quit);
myCanvas.addCommand(back);
myCanvas.setCommandListener(this);
display.setCurrent(myCanvas);

}
...全文
115 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xian_hf 2008-07-27
  • 打赏
  • 举报
回复
Canvas myCanvas 没有实例化
在需要用myCanvas.setXXX()之前 new Canvas();
都市巴巴 2008-07-26
  • 打赏
  • 举报
回复
my001.introduce(+150)

那么你就在这个introduce方法里面打断点一步一步跟踪吧
cenkongded 2008-07-26
  • 打赏
  • 举报
回复
全部代码。


import java.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class my001 extends MIDlet implements CommandListener
{
private Display display;
private Canvas myCanvas;
Command quit;
Command enter;
Command back;
List menu;


// TextField phone;

String sr;

public my001()
{

display = Display.getDisplay(this);
quit = new Command("退出",Command.EXIT, 3);
enter = new Command("进入", Command.SCREEN, 3);
back=new Command("返回",Command.BACK,3);

}
public void startApp()
{
menu = new List("三国演义", 3);
menu.append("第一章", null);
menu.append("第二章", null);
menu.append("第三章", null);
menu.append("第四章", null);
menu.append("第五章", null);
menu.append("第六章", null);
menu.append("第七章", null);
menu.append("第八章", null);
menu.addCommand(enter);
menu.addCommand(quit);
menu.setCommandListener(this);
display.setCurrent(menu);
}

void introduce(int x)
{
String fn;
fn="/";
fn=fn+Integer.toString(x);
fn=fn+".txt";


InputStream in = getClass().getResourceAsStream(fn);

ByteArrayOutputStream s;
s = new ByteArrayOutputStream(); //产生内存数组输出字节流对象变量S
try{
int ch=0;
ch=in.read(); //由输入流对象变量in的read方法以字节为单位来读取文件的内容,读取到文件尾时的值为-1。
while ( ch!= -1 ) {
//如果未读到文件尾把读取的内容写入S变量中,并读取下一字节内容
s.write( ch );
ch=in.read();
}
in.close(); //关闭输入流对象。
} catch (IOException ioe){
System.out.println(ioe.toString());
}
sr = s.toString(); //将S变量转为字符串
try{
s.close(); //关闭输出流对象
} catch (IOException ioe){
System.out.println(ioe.toString());
}




// phone =new TextField(menu.getTitle(), Sr,4000,0);

// ui_form.append(phone);
myCanvas.setTitle("三国演义");
myCanvas.addCommand(quit);
myCanvas.addCommand(back);
myCanvas.setCommandListener(this);
display.setCurrent(myCanvas);

}

public void setMyCanvas(Canvas myCanvas) {
this.myCanvas = myCanvas;
}
public Canvas getMyCanvas() {
return myCanvas;
}


public void pauseApp()
{

}
public void destroyApp(boolean flag)
{
notifyDestroyed();
}
public void commandAction(Command command, Displayable displayable)
{
if(command == quit)
{


destroyApp(true);

}

else
if(command == enter)
{
List list = (List)display.getCurrent();

// switch(list.getSelectedIndex())
//{
int flag=list.getSelectedIndex();
flag=flag+1;
// case 0: // '\001'
introduce(flag);
// break;
//case 1: // '\001'
// destroyApp(true);
// break;

}
else
if(command==back)
{
display.setCurrent(menu);
}
}















public abstract class myCanvas extends Canvas{
public myCanvas (){

}
public void showNotify(){}
public void hideNotify(){}

public void paint(Graphics g){
g.setColor(128,128,128);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(120,18,210);
g.setFont(Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_BOLD,Font.SIZE_LARGE));
g.drawString(sr, 0,0,Graphics.TOP|Graphics.LEFT);



}




}




}
cenkongded 2008-07-26
  • 打赏
  • 举报
回复

java.lang.NullPointerException
at my001.introduce(+150)
at my001.commandAction(+50)
at javax.microedition.lcdui.Display$DisplayAccessor.commandAction(+282)
at javax.microedition.lcdui.Display$DisplayManagerImpl.commandAction(+10)
at com.sun.midp.lcdui.DefaultEventHandler.commandEvent(+68)
at com.sun.midp.lcdui.AutomatedEventHandler.commandEvent(+47)
at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.handleVmEvent(+186)
at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.run(+57)

debug不响应命令按钮。
ZangXT 2008-07-26
  • 打赏
  • 举报
回复
eclipse会在你出问题的那一行直接指出来.
你指出是哪一行,别人才好为你分析
在错误信息中直接点错误的链接,会跳到代码中相应的行.
cenkongded 2008-07-26
  • 打赏
  • 举报
回复
ecplise
有关设置还很生疏。
ZangXT 2008-07-26
  • 打赏
  • 举报
回复
你用什么写程序?
cenkongded 2008-07-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xuhaiyang 的回复:]
错误代码里会说哪一行的
[/Quote]

没有显示行数,只有个(+150)。
xuhaiyang 2008-07-26
  • 打赏
  • 举报
回复
错误代码里会说哪一行的

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧