读书人

!j2me内存不足有关问题!

发布时间: 2011-12-30 23:30:45 作者: rapoo

请教高手!!j2me内存不足问题!!
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;

public class SpriteCanvas extends GameCanvas implements Runnable{
private Image spriteImage;
private Sprite sprite;
private int spriteWidth;
private int spriteHeight;
private int spriteX;
private int spriteY;
private int[][] frame_seq={{0,1,2,2,1,0},
{3,4,5,5,4,3},
{6,7,8,8,7,6},
{9,10,11,11,10,9}};
private int now_seq;
private Graphics g;

private int offsetX;
private int offsetY;
private boolean isRun;

public SpriteCanvas(){
super(true);
try{
spriteImage=Image.createImage( "/sp.png ");//load image;
sprite=new Sprite(spriteImage,24,32);//create sprite
}
catch(Exception e){
e.printStackTrace();
}
spriteWidth=sprite.getWidth();
spriteHeight=sprite.getHeight();
now_seq=2;
sprite.setFrameSequence(frame_seq[now_seq]);
g=this.getGraphics();
offsetX=3;
offsetY=3;
isRun=true;
}
public void run(){
try{
while(isRun){
new Thread().sleep(20);


render(g);
input();
}
}
catch(Exception e){
e.printStackTrace();
}

}
public void stop(){
isRun=false;
}
public void input(){
int keyState=this.getKeyStates();

if((keyState&DOWN_PRESSED)!=0){
if(now_seq!=2){
now_seq=2;
sprite.setFrameSequence(frame_seq[now_seq]);
}else{

if(spriteY <=this.getHeight()-spriteHeight){
spriteY=spriteY+offsetY;
sprite.nextFrame();
//System.out.println( "true ");
}
}
}
if((keyState&UP_PRESSED)!=0){
if(now_seq!=0){
now_seq=0;
sprite.setFrameSequence(frame_seq[now_seq]);
}else{

if(spriteY> =0){


spriteY=spriteY-offsetY;
sprite.prevFrame();
//System.out.println( "true ");
}
}

}
if((keyState&LEFT_PRESSED)!=0){
if(now_seq!=3){
now_seq=3;
sprite.setFrameSequence(frame_seq[now_seq]);
}else{

if(spriteX> 0){
spriteX=spriteX-offsetX;
sprite.nextFrame();
//System.out.println( "true ");
}
}

}
if((keyState&RIGHT_PRESSED)!=0){
if(now_seq!=1){
now_seq=1;
sprite.setFrameSequence(frame_seq[now_seq]);
}else{

if(spriteX <=this.getWidth()-spriteWidth){
spriteX=spriteX+offsetX;
sprite.prevFrame();


//System.out.println( "true ");
}
}

}

}
public void render(Graphics g){
g.setColor(0xffffff);//设置屏幕背景颜色
g.fillRect(0, 0, this.getWidth(),this.getHeight());//用背景颜色填充全屏幕
sprite.setPosition(spriteX, spriteY);
sprite.paint(g);
flushGraphics();//闪
}
}
运行后,出现了下面的问题:
Uncaught exception java/lang/OutOfMemoryError.

请教高手这是什么问题呀?程序没有什么错误,就是运行一会后就会出现这种问题。
急!!
小弟先在此谢过了!!


[解决办法]
在某些跳出调用的地方加上
system.gc();
不仿试试。
[解决办法]
应该是哪里出了死循环吧
[解决办法]
恩,还是楼上的仔细
while(isRun){
new Thread().sleep(20);
render(g);
input();
}
这里出问题了,死循环

读书人网 >J2ME开发

热点推荐