请问为什么在Nokia 60系列的手机上多次使用Image.createImage(data,0,len)要出错???

HashCodeWithJava 2004-06-16 10:28:24
大家看一下我的代码.
我要从一个数组中创建一张png图片.使用的是Image.createImage函数

可是一旦多运行几次,它就报告java.lang.IllegalArgumentException的错误
而相同的图片,我却可以在第一次成功调用.但是以后再调用几次的时候就报告错误了.


// 创建Image
image = Image.createImage(ImageBuf, 0, Size);

而在Nokia 60的模拟器上没有出现任何问题.在Nokia 40的机器上也没有出现任何问题.


请问大家,这是怎么回事的?
...全文
167 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dd777 2004-09-02
  • 打赏
  • 举报
回复
to: tangl_99(Min-Kyeong)
你的qq号好象不需要验证呀,加你了,怎么不回话?
HashCodeWithJava 2004-08-26
  • 打赏
  • 举报
回复
还有,我现在两点.
1.如果直接
Image.createImage("/xxx.png")
就不会有任何问题

2.如果是在Nokia 7610(Symbian OS 7.0)的机器上运行,就不会出现上述这个问题.
似乎这个问题只有在Nokia 3650和Nokia 7650或者说是Symbian OS 6.0上才有.

大家的测试结果如何?
HashCodeWithJava 2004-08-20
  • 打赏
  • 举报
回复
Up
HashCodeWithJava 2004-08-19
  • 打赏
  • 举报
回复
dd777(grass)
我的QQ:88664220
加我的时候注明(Nokia的bug)

感谢你的测试。
dd777 2004-08-11
  • 打赏
  • 举报
回复
最新实验现象:

针对出现问题的手机,发现跟装载的图片的色彩数有关,跟2的次方数比较接近的图片几乎没有问题,而偏差比较远的就会出问题,我正在继续做实验找规律。

大家有解决的吗?
bobshi 2004-08-11
  • 打赏
  • 举报
回复
我之前也遇到过这种问题,图片用的时候再加载,不用的时候再释放掉,

这样会比较好一点。
Shires 2004-08-11
  • 打赏
  • 举报
回复
mark
lumber 2004-08-11
  • 打赏
  • 举报
回复
Image.createImage这个方法很耗内存的,多次使用后报错应该是内存不够的原因
wanglefox 2004-08-11
  • 打赏
  • 举报
回复
应该是手机内存空间 大小的问题。
如果有Image不需要,把它null了~!
不然累积下了有可能内存不够。

dd777 2004-08-11
  • 打赏
  • 举报
回复
大家看看这个代码,背景切换没问题吧,但是在S60真机上换一定次数之后,就会出错
不知道其他机器是否有问题,我怀疑这个S60 kvm的bug.
不仅是图片,我发现只要在程序运行中,反复生成新的对象(任意的,包括Form Canvas)
只要超过大概一定的数目,无论是多么简单的代码,都会出错。
必须一开始在MIDlet运行的唯一一次初始化的过程中加载所有的资源和对象,这样就没问题了。
中途new 肯定出问题。

大家可以试试看。
在/res/下随便加3个图片以测试,
名字是background1.png background2.png background3.png

import javax.microedition.lcdui.*;
import com.nokia.mid.ui.FullCanvas;

public class Displayable1
extends FullCanvas{
int num = 1; // 图片编号 一共3个
Image imgBackground = null; // 图片

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

private void jbInit() throws Exception {
// Set up this Displayable to listen to command events
loadBack(1);

}

protected void paint(Graphics g) {
/** @todo Add paint codes */
if (imgBackground != null)
g.drawImage(imgBackground, 0, 0, 20);
}

public void keyPressed(int keyCode) {
if(keyCode == Canvas.KEY_STAR){
loadBack(num%3 + 1);
num ++;
}
if(keyCode == Canvas.KEY_POUND){
MIDlet1.quitApp();
}
repaint();
}

private void loadBack(int backNum) { // 换新背景图
try {
imgBackground = null;// 不加也行 s40上最好加
System.gc(); // 不加也行 s40上最好加
imgBackground = Image.createImage("/res/background" + backNum + ".png");
}
catch (Exception e) {
System.out.println("error get img background");
}
}

hu1dao 2004-08-09
  • 打赏
  • 举报
回复
有过这个问题,没有解决掉
后来饶过了
dd777 2004-08-09
  • 打赏
  • 举报
回复
哥们,我也遇到同样的问题,看来是60的kvm有问题了
我做实验,发现跟装载的内存空间有关,大概在70k以内就没问题
一旦重复装载然后null gc()大于这个数,就出现不能装载新图的现象
而且再操作新的装载图的话,出现 Exception

你解决了吗?

欢迎交流一下

13,100

社区成员

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

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