请教高手!!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();
}
这里出问题了,死循环