首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2ME开发 >

!j2me内存不足有关问题!

2011-12-30 
请教高手!!j2me内存不足问题!!importjavax.microedition.lcdui.*importjavax.microedition.lcdui.game.*

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

热点排行