请教:一个关于线程的问题
请看下面的代码:
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时都要重新创建图片..
为什么不创建一次呢??????