Hallo,
ich habe einen Thread, der repaint aufruft und
dann darauf wartet, das ein Canvas neu gezeichnet wird.
Code(gekürzt):
Nach einiger Zeit gibt es allerdings keine Ausgabe
mehr und der Thread wartet auf ein notify().
1.Warum?
2.Was kann ich dagegen tun?
ich habe einen Thread, der repaint aufruft und
dann darauf wartet, das ein Canvas neu gezeichnet wird.
Code(gekürzt):
Java:
public class GameUpdater extends Thread implements KeyListener, MouseListener, MouseMotionListener {
private static final long MINTIME = 20;
private Game game;
public ArrayList<GameObject> objs;
private ArrayList<KeyEvent> keys;
//weitere felder
public GameUpdater(Game game) {
super("GameUpdater");
this.game = game;
objs = new ArrayList<GameObject>();
keys = new ArrayList<KeyEvent>();
}
//info-methoden
@Override
public void run(){
long time;
while(true){
time = System.currentTimeMillis();
for(int i = 0;i < objs.size();i++){
objs.get(i).update(this);
}
game.points.clear();
for(int i = 0;i < objs.size();i++){
game.points.addAll(objs.get(i).img);
}
game.repaint();
waitForRepaint();
System.out.println(time + " / " + (System.currentTimeMillis() - time));
while(time + MINTIME > System.currentTimeMillis());
}
}
private void waitForRepaint() {
synchronized(game){
try {
game.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//interface-methoden
}
public class Game extends Canvas {
private static final long serialVersionUID = 5734742867859616972L;
Vector<ColorPoint> points = new Vector<ColorPoint>();
public Game(){
super();
GameUpdater gu = new GameUpdater(this);
this.addKeyListener(gu);
this.addMouseListener(gu);
this.addMouseMotionListener(gu);
gu.start();
}
@Override
public void paint(Graphics g){
for(int i = 0;i < points.size();i++){
ColorPoint cp = points.get(i);
drawPoint(g,cp.getColor(),cp.x,cp.y);
}
synchronized(this){
notify();
}
}
private void drawPoint(Graphics g, Color c, int x, int y){
g.setColor(c);
g.drawRect(x, y, 1, 1);
}
}
Nach einiger Zeit gibt es allerdings keine Ausgabe
mehr und der Thread wartet auf ein notify().
1.Warum?
2.Was kann ich dagegen tun?
Zuletzt bearbeitet: