Hey ich hab ein kleines Programm gemacht das einen Ball bewegt und dieser an den Wänden apprallt mit den Buttons "Start" und "Stop". Wenn ich auf Start drücke bewegt sich der Ball und mit Stop bleibt er an der aktuellen Position stehen aber wenn ich nochmal auf Start drück macht er nicht weiter was er eigentlich sollte! Könnt ihr mir den Fehler zeigen? Hier ist der Code:
Code:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
class ball extends Thread
{
protected Panel p;
protected Graphics g;
protected int xa,ya,b,h;
protected boolean fStop = false;
public ball(Panel p, int b, int h)
{
this.p = p;
this.b = b;
this.h = h;
g = p.getGraphics();
}
public void setP(int x,int y)
{
xa = y;
ya = y;
}
public void show()
{
g.setColor(Color.red);
g.drawOval(xa,ya,b,h);
}
public void hide()
{
g.setColor(Color.white);
g.drawOval(xa,ya,b,h);
}
public void move(int xn, int yn)
{
hide();
xa = xn;
ya = yn;
show();
try
{
Thread.sleep(10);
}
catch(InterruptedException e)
{
g.drawString("Threadfehler",100,100);
}
}
public void run()
{
setP(5,5);
int dx = 2, dy = 2;
fStop = false;
do
{
if(xa>p.getSize().width-20)dx = -dx;
if(xa<5)dx = -dx;
if(ya>p.getSize().height-20)dy = -dy;
if(ya<5)dy = -dy;
move(xa+dx,ya+dy);
}
while(!fStop);
}
}
public class BreakThru extends Applet implements ActionListener
{
Panel p;
Button start,stop;
ball ball_br;
public void init()
{
p = new Panel();
start = new Button("Start");
stop = new Button("Stop");
this.setBackground(Color.blue);
this.setLayout(null);
p.setBounds(5,5,400,200);
p.setBackground(Color.white);
this.add(p);
start.setBounds(100,210,50,20);
start.setBackground(Color.lightGray);
start.addActionListener(this);
this.add(start);
stop.setBounds(200,210,50,20);
stop.setBackground(Color.lightGray);
stop.addActionListener(this);
this.add(stop);
ball_br = new ball(p,20,20);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==start)
{
ball_br.start();
ball_br.fStop=false;
}
if(e.getSource()==stop)ball_br.fStop = true;
}
}