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

请问:一个关于线程的有关问题

2012-04-02 
请教:一个关于线程的问题请看下面的代码:importjava.util.Randomimportjavax.microedition.lcdui.*impor

请教:一个关于线程的问题
请看下面的代码:
import   java.util.Random;
import   javax.microedition.lcdui.*;
import   javax.microedition.lcdui.game.GameCanvas;

public   class   MyCanvas   extends   GameCanvas   implements   Runnable{
    private   Graphics   graphics;
    private   int   width,   height;
    Thread   thread   =   new   Thread(new   MyCanvas());

    protected   MyCanvas()   {
          super(true);
          graphics   =   this.getGraphics();
          width   =   getWidth();
          height   =   getHeight();
          thread.start();
    }

    public   void   paint(Graphics   g)   {
          setFullScreenMode(true);
          g.setColor(0x000000);
          g.fillRect(0,   0,   getWidth(),   getHeight());
          drawBackground(g);
          drawHeart(g);
    }

    static   Image   createImage(String   imageName){
          Image   img   =   null;
          try{
                    img   =   Image.createImage(imageName);
          }catch(Exception   e){
          }
                    return   img;  
    }

    public   void   drawBackground(Graphics   g){
          Image   background   =   null;
          background   =   createImage( "/image/bg_0.png ");
          g.drawImage(background,   background.getWidth()   /   2,   background.getHeight()   /   2,   Graphics.HCENTER|Graphics.VCENTER);
    }

    public   void   drawSky(Graphics   g){
          Image   sky   =   null;
          sky   =   createImage( "/image/shanxing.png ");
          sky.getGraphics();
          g.drawImage(sky,   sky.getWidth()   /   2,   sky.getHeight()   /   2,   Graphics.HCENTER|Graphics.VCENTER);
    }

          .........

    public   void   run()   {
          boolean   isRunning   =   true;
          while(isRunning){
                    drawSky(graphics);
                    try   {
                              thread.sleep(80);
                    }   catch   (InterruptedException   e)   {
                              e.printStackTrace();


                    }
          }
    }
}

此代码运行时报java.lang.OutOfMemoryError错误。

我知道是线程出错,但不知道怎么错的,望指点!

[解决办法]
有没有确定不是你的图片路径有问题呢?
[解决办法]
java.lang.OutOfMemoryError出在什么地方?
看样子应该是耗用内存太多造成的。
[解决办法]
public void drawSky(Graphics g){
Image sky = null;
sky = createImage( "/image/shanxing.png ");
sky.getGraphics(); // 这在干嘛,getGraphics只是调用了一下,没有用嘛。
g.drawImage(sky, sky.getWidth() / 2, sky.getHeight() / 2, Graphics.HCENTER|Graphics.VCENTER);
}

不过这不是问题的关键所在。
[解决办法]
public void drawSky(Graphics g){
Image sky = null;
sky = createImage( "/image/shanxing.png ");
sky.getGraphics();
g.drawImage(sky, sky.getWidth() / 2, sky.getHeight() / 2, Graphics.HCENTER|Graphics.VCENTER);
}

----------------------------------------------
你在run里以100毫秒每次的速度调用drawSky, 然而你却每次调用drawSky时都要重新创建图片..
为什么不创建一次呢??????

热点排行