读书人

关于手机Image加载多了手机JAVA模拟

发布时间: 2012-02-03 22:02:47 作者: rapoo

关于手机Image加载多了,手机JAVA模拟器卡主的问题,帮忙看下,谢谢
这是第一个函数执行的代码,没问题

Java code
//这段代码加载Cartoon1到4,4副图片,没问题                try{//Cartoon1...Cartoon7定义为Image                                                                  Cartoon1=Image.createImage("/youli_qian10.png");                    Cartoon2=Image.createImage("/youli11_20.png");                    Cartoon3=Image.createImage("/youli21_30.png");                    Cartoon4=Image.createImage("/youli31_41.png");                                    spriteCartoon1=new Sprite(Cartoon1,Cartoon1.getWidth()                            ,Cartoon1.getHeight()/10);                    spriteCartoon2=new Sprite(Cartoon2,Cartoon2.getWidth()                            ,Cartoon2.getHeight()/10);                    spriteCartoon3=new Sprite(Cartoon3,Cartoon3.getWidth()                            ,Cartoon3.getHeight()/10);                    spriteCartoon4=new Sprite(Cartoon4,Cartoon4.getWidth()                            ,Cartoon4.getHeight()/11);                        spriteYouli1=spriteCartoon1;                    spriteYouli2=spriteCartoon2;                    spriteYouli3=spriteCartoon3;                    spriteYouli4=spriteCartoon4;                        int tmpx=-80;                    int tmpy=30;                    spriteYouli1.setPosition(tmpx,tmpy);                    spriteYouli2.setPosition(tmpx,tmpy);                    spriteYouli3.setPosition(tmpx,tmpy);                    spriteYouli4.setPosition(tmpx,tmpy);                }catch(Exception ex){};

这是第二个函数执行的代码,到注释出程序就卡主了
Java code
//这里重新加载Cartoon1到7在加载第4副的时间卡主了                try{                    Mydebug_Flush(-1);                                                                    Cartoon1=Image.createImage("/hong1-5.png");                    Mydebug_Flush(-2);                    Cartoon2=Image.createImage("/hong5-10.png");                    Mydebug_Flush(-3);//到这里程序不在往下执行,卡在这里了                    Cartoon3=Image.createImage("/hong11-15.png");                    Mydebug_Flush(-4);                    Cartoon4=Image.createImage("/hong16-20.png");                    Mydebug_Flush(-5);                    Cartoon5=Image.createImage("/hong21-25.png");                    Mydebug_Flush(-6);                    Cartoon6=Image.createImage("/hong26-30.png");                    Mydebug_Flush(-7);                    Cartoon7=Image.createImage("/hong31-35.png");                                        spriteHong1=new Sprite(Cartoon1,Cartoon1.getWidth()/5                            ,Cartoon1.getHeight());                    spriteHong2=new Sprite(Cartoon2,Cartoon2.getWidth()/5                            ,Cartoon2.getHeight());                    spriteHong3=new Sprite(Cartoon3,Cartoon3.getWidth()/5                            ,Cartoon3.getHeight());                    spriteHong4=new Sprite(Cartoon4,Cartoon4.getWidth()/5                            ,Cartoon4.getHeight());                    spriteHong5=new Sprite(Cartoon5,Cartoon5.getWidth()/5                            ,Cartoon5.getHeight());                    spriteHong6=new Sprite(Cartoon6,Cartoon6.getWidth()/5                            ,Cartoon6.getHeight());                    spriteHong7=new Sprite(Cartoon7,Cartoon7.getWidth()/5                            ,Cartoon7.getHeight());                                int tmpx,tmpy;                    tmpx=40;tmpy=-50;                    spriteHong1.setPosition(tmpx,tmpy);                    spriteHong2.setPosition(tmpx,tmpy);                    spriteHong3.setPosition(tmpx,tmpy);                    spriteHong4.setPosition(tmpx,tmpy);                    spriteHong5.setPosition(tmpx,tmpy);                    spriteHong6.setPosition(tmpx,tmpy);                    spriteHong7.setPosition(tmpx,tmpy);                }catch(Exception ex){};                CartoonFrames=1;            }            lm.paint(gra,0,0);            spriteHong1.paint(gra);            Sleep(100);                this.flushGraphics();            spriteHong1.nextFrame(); 


Java code
        protected void Mydebug_Flush(int i){            System.gc();            String s1,s2,s3;            s1="total:"+Runtime.getRuntime().totalMemory();            s2="free:"+Runtime.getRuntime().freeMemory();            s3="到达:"+i;            gra.setColor(0xFFFFFF);            gra.fillRect(0, 0,scrWidth,scrHeight);            gra.setColor(0x0);            gra.drawString(s3, 20,0, 0);            gra.drawString(s1,20,20,0);            gra.drawString(s2, 20,40,0);            this.flushGraphics();            try{                Thread.currentThread().sleep(2000);            }catch(Exception ex){}        }

我用Mydebug_Flush()显示到第二段代码注释处还有2M多的内存,按理说内存是足够了,但不知道为什么貌似是第二段代码加载图片就卡主了,
Cartoon2=Image.createImage("/hong5-10.png");
Mydebug_Flush(-3);//到这里程序不在往下执行,卡在这里了

Cartoon3=Image.createImage("/hong11-15.png");//程序应该是在这卡主了
Mydebug_Flush(-4);
求各位大大,帮忙解释下,谢谢了~

[解决办法]
好长的代码啊 帮顶一下
[解决办法]
图片如果不是必要的就只在用的时候加载,不再使用的图片,就设为null,自己再加句System.gc()进行内存回收。可以合并成一张的图片就合并成一张。
[解决办法]
线程太多,导致内存释放不够远行,解决这个问题方法,用if语句,另不用图片是把它设为null。
[解决办法]
J2ME项目里面 大图层一般不要超过4~5个。。。。。- -否则你懂得。。。这不是PC。。

读书人网 >J2ME开发

热点推荐