java.io.IOException 会有哪些方面引起这个错误啊?

RayLynn 2005-08-01 11:56:24
我在 Jbuilder 里都运行起来了。
可在WTK中就不能运行了。而出现了以下异常:
java.io.IOException
at javax.microedition.lcdui.ImmutableImage.getImageFromStream(+15)
at javax.microedition.lcdui.ImmutableImage.<init>(+20)
at javax.microedition.lcdui.Image.createImage(+8)
at DancePlace.<init>(+170)
at Game.<init>(+30)
at Mainlet.<init>(+13)
at java.lang.Class.runCustomCode(+0)
at com.sun.midp.midlet.MIDletState.createMIDlet(+19)
at com.sun.midp.midlet.Selector.run(+22)

然而当我将项目移到WTK下时,我必须将图象资源存放在Res文件夹下。
这些我都做到了,为什么还出现以上的错误呢?
请指正。谢谢!!
...全文
2170 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaoyouyun1988 2010-06-05
  • 打赏
  • 举报
回复
我现在遇到同样的问题了,可是我还是没解决啊。请问大家有谁还知道的么?
homesos 2005-08-02
  • 打赏
  • 举报
回复
package UI;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import java.util.*;

public class Mainlet extends MIDlet
{
private Game game;
public Display display;

public Mainlet()
{
}
public void startApp()
{
display = Display.getDisplay(this);
(game = new Game(this)).startGame();

}
public void pauseApp()
{
//
}
public void destroyApp(boolean unconditional)
{
//
}
public void exitMIDlet()
{
destroyApp(true);
notifyDestroyed();
}
}

class Game
{
public MainMenu mainMenu;
public DancePlace dancePlace;
private Mainlet mainLet;
private Image imgEmpty;
public Game(Mainlet mainlet)
{
this.mainLet = mainlet;

}
public void startGame()
{
System.out.println("1");
this.mainMenu = new MainMenu(this);
System.out.println("2");
this.dancePlace = new DancePlace(this);
System.out.println("3");
// 启动游戏
mainLet.display.setCurrent(this.mainMenu);
System.out.println("4");
}
public void actionDance()
{
// 开始跳舞
mainLet.display.setCurrent(this.dancePlace);
}
public void exitGame()
{
this.exitGame();
}

public void MydrawRegion(Graphics graphics, Image imgSrc, int SrcX,
int SrcY,
int TargetX, int TargetY, int TargetWidth,
int TargetHeight) {
imgEmpty = Image.createImage(TargetWidth, TargetHeight);
imgEmpty.getGraphics().setClip(0, 0, TargetWidth, TargetHeight);
imgEmpty.getGraphics().drawImage(imgSrc, -SrcX, -SrcY,
Graphics.LEFT | Graphics.TOP);
graphics.drawImage(imgEmpty, TargetX, TargetY,
Graphics.LEFT | Graphics.TOP);
}

}

class MainMenu extends Canvas
{
private Image image;
private int imageIndex;
private Game game;
public MainMenu(Game game)
{
this.game = game;
imageIndex = 0;
try
{
image = Image.createImage("/Resource/Main.png");
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
protected void keyPressed(int key)
{
if(imageIndex == 5) imageIndex = 2;
switch (getGameAction(key)) {
case Canvas.UP:
imageIndex --;
if(imageIndex < 0) imageIndex = 0;
break;
case Canvas.DOWN:
imageIndex ++;
if(imageIndex > 3) imageIndex = 3;
break;
case Canvas.FIRE:
// 根据 imageIndex 决定要进入的地方。
switch(imageIndex)
{
case 0:
// 开始游戏 开始跳舞
this.game.actionDance();
break;
case 1:
// 读取进度 开始跳舞
imageIndex = 4;
break;
case 2:
// About

homesos 2005-08-02
  • 打赏
  • 举报
回复
package UI;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import java.util.*;

public class Mainlet extends MIDlet
{
private Game game;
public Display display;

public Mainlet()
{
}
public void startApp()
{
display = Display.getDisplay(this);
(game = new Game(this)).startGame();

}
public void pauseApp()
{
//
}
public void destroyApp(boolean unconditional)
{
//
}
public void exitMIDlet()
{
destroyApp(true);
notifyDestroyed();
}
}

class Game
{
public MainMenu mainMenu;
public DancePlace dancePlace;
private Mainlet mainLet;
private Image imgEmpty;
public Game(Mainlet mainlet)
{
this.mainLet = mainlet;

}
public void startGame()
{
System.out.println("1");
this.mainMenu = new MainMenu(this);
System.out.println("2");
this.dancePlace = new DancePlace(this);
System.out.println("3");
// 启动游戏
mainLet.display.setCurrent(this.mainMenu);
System.out.println("4");
}
public void actionDance()
{
// 开始跳舞
mainLet.display.setCurrent(this.dancePlace);
}
public void exitGame()
{
this.exitGame();
}

public void MydrawRegion(Graphics graphics, Image imgSrc, int SrcX,
int SrcY,
int TargetX, int TargetY, int TargetWidth,
int TargetHeight) {
imgEmpty = Image.createImage(TargetWidth, TargetHeight);
imgEmpty.getGraphics().setClip(0, 0, TargetWidth, TargetHeight);
imgEmpty.getGraphics().drawImage(imgSrc, -SrcX, -SrcY,
Graphics.LEFT | Graphics.TOP);
graphics.drawImage(imgEmpty, TargetX, TargetY,
Graphics.LEFT | Graphics.TOP);
}

}

class MainMenu extends Canvas
{
private Image image;
private int imageIndex;
private Game game;
public MainMenu(Game game)
{
this.game = game;
imageIndex = 0;
try
{
image = Image.createImage("/Resource/Main.png");
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
protected void keyPressed(int key)
{
if(imageIndex == 5) imageIndex = 2;
switch (getGameAction(key)) {
case Canvas.UP:
imageIndex --;
if(imageIndex < 0) imageIndex = 0;
break;
case Canvas.DOWN:
imageIndex ++;
if(imageIndex > 3) imageIndex = 3;
break;
case Canvas.FIRE:
// 根据 imageIndex 决定要进入的地方。
switch(imageIndex)
{
case 0:
// 开始游戏 开始跳舞
this.game.actionDance();
break;
case 1:
// 读取进度 开始跳舞
imageIndex = 4;
break;
case 2:
// About
imageIndex = 5;
break;
case 3:
// 退出
this.game.exitGame();
break;
}
break;
}
this.repaint();
}
public void paint(Graphics g)
{
g.clipRect(0,0,128,160);
game.MydrawRegion(g,image,imageIndex*128,0,0,0,128,160);
}
}

class DancePlace extends Canvas implements Runnable
{
private long intStore;
private Marks markGroups;
private Image map,topMarks,MM;
private Image imgMarkMove[] = new Image[4];
private Image imgMarkLight[] = new Image[4];
private Game game;
private Thread thread;
public String store;
private int MM_picIndex = 0;

public DancePlace(Game game)
{
intStore = 0;
store = "STORE:0";
markGroups = new Marks(this);
thread = new Thread(this);
this.game = game;
try
{
/*
检测图片是否存在,因为FILE类属于J2SE的,所以这里不能用。
File f = new File("Mark_Move_" + 0 + ".png");
if (f.exists())
{
System.out.println("Found Image!");
}
else{System.out.println("NotFound Image!");}
*/
String str;
for(int i=0;i<4;i++)
{
str = "/Resource/Mark_Move_" + i + ".png";
System.out.println(str);
imgMarkMove[ i ] = Image.createImage(str);
}
for(int i=0;i<4;i++)
{
str = "/Resource/Light_" + i + ".png";
System.out.println(str);
imgMarkLight[ i ] = Image.createImage(str);
}
map = Image.createImage("/Resource/Map.png");
topMarks= Image.createImage("/Resource/PicMark.png");
MM = Image.createImage("/Resource/MM_ALL.png");
}
catch(Exception ex)
{
ex.printStackTrace();
}
thread.start();
}

public vo
homesos 2005-08-02
  • 打赏
  • 举报
回复
当然喽 你实现的是个跳舞机吧 
Map我加进来了,可以运行。
不过,你的坐标可能设置的不大对,在WTK1.1上界面显示不全 在WTK2.0上只显示在左上角
按键好像没有用哦

你的还不行?
RayLynn 2005-08-02
  • 打赏
  • 举报
回复
我已经将MAP.png 放进来了。
上次忘了放,不好意思。
现在已经放进来了。地址还是原先那个:
http://www.monthsoft.com/file/dance.rar


你能够真正的在WTK下运行起来吗?

homesos 2005-08-02
  • 打赏
  • 举报
回复

你要保证图片都存在,那张Map.png图片我没找到
首先在JB中,
要不你就重建一个工程,新建两个包 UI and Resource
将.java放置于UI包内,将图片放入Resource包内.
在位于UI包内的.java文件首,添加package UI;//打包
再按照"/Resource/Main.png"的路径样式,读取图片。

运行过程中,如果还有错,要看看是不是这个异常:
java.io.IOException
是不是同样位于DancePlace的构造方法中,如果不位于这里,那就说明是有希望的,后面的再搞……
如果还是同样位于此,再说……

如果能在JB中运行正常,将当前工程目录DancePlace直接拷贝至WTK的Apps目录下,再工程目录下新建一个bin目录,将jad and jar 放置于内,这样工程即可运行
homesos 2005-08-02
  • 打赏
  • 举报
回复
我也是菜鸟,以后有问题相互帮忙,共同进步。
RayLynn 2005-08-02
  • 打赏
  • 举报
回复
我的错~!`
你要多少分,说吧,我全给你!!!
兄弟,你这个这分热情的耐心```我是多么的希望与你交个朋友啊~!
interhanchi 2005-08-01
  • 打赏
  • 举报
回复
public class IOExceptionextends Exception

Signals that an I/O exception of some sort has occurred. This class is the general class of exceptions produced by failed or interrupted I/O operations.

homesos 2005-08-01
  • 打赏
  • 举报
回复
不知道你的路径对不对
具体你可以自己写一个,判断一下路径是否正确。


比如:
File f = new File("/icons/JavaPowered-8.png");
if (f.exists())
{
System.out.println("Found Image!");
}
else{System.out.println("NotFound Image!");}
homesos 2005-08-01
  • 打赏
  • 举报
回复
楼上正解

调用顺序:
createImage(String)->ImmutableImage(String)->ImmutableImage.getImageFromStream(String)

IOException异常是由ImmutableImage.getImageFromStream(String)引发的,表明路径是错误的
很有可能就是你的图片名用的是中文或是路径找不到文件
贝壳鱼 2005-08-01
  • 打赏
  • 举报
回复
图片名不能用中文。而且如果移到WTK编辑,就要新建个工程,然后把原文件和图片拷贝到RES 和SCR目录
RayLynn 2005-08-01
  • 打赏
  • 举报
回复
我搞了半天,还是不行。天哪```帮帮忙拉,兄弟们。。。
RayLynn 2005-08-01
  • 打赏
  • 举报
回复
你那个类,我把它放到src\UI\下面去了,在类首添加package UI

你说的那个类是哪个类?
RayLynn 2005-08-01
  • 打赏
  • 举报
回复
能把你所修改的文件传给我吗?
homesos 2005-08-01
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/4180/4180631.xml?temp=.3051569
我在此回复了你那贴所提的问题:如何看异常
homesos 2005-08-01
  • 打赏
  • 举报
回复
楼主
找到真正的错误了,现在可以运行(Jb and WTK),呵呵我看到效果了,不过速度太慢了

规范目录是其一,真的很重要,
图片目录不要取名res(我这边有问题),图片目录改为Resource
image = Image.createImage("/Resource/Main.png");
你那个类,我把它放到src\UI\下面去了,在类首添加package UI

其二,少一张图片Map.png,最起码你给的压缩包中是这样的

我建议你把构造方法中的东东拿到这里来写,不过你放在那应该不算错的
public void startApp()
{
display = Display.getDisplay(this);
(game = new Game(this)).startGame();

}
homesos 2005-08-01
  • 打赏
  • 举报
回复
哇 除了你代码可能会有错误之外,我将东东分类存放到不同的目录下,你所说的错误消除。

不过,我想你的代码存在一定的错误,所以俺在这里不能运行。
错误可能存在于

public Mainlet()
{
game = new Game(this);
display = Display.getDisplay(this);
}

你在当前类的构造方法中,调用了另外一个类的构造方法且将当前类的对象作为参数传入。
可是,我就有疑问了,当前类的构造方法都未执行完成,哪来的对象。

你还是将game = new Game(this);放到startApp()方法中去吧
RayLynn 2005-08-01
  • 打赏
  • 举报
回复
难道你放在WTK下可以运行?
homesos 2005-08-01
  • 打赏
  • 举报
回复
拜托,楼主,看看你的程序目录结构先。

把目录建起来,什么东东该放在什么目录,整理一下,编译运行一下,肯定OK.
加载更多回复(10)

13,100

社区成员

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

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