import java.awt.*;
import java.awt.event.*;
class Marble extends Thread{
private int xdir=2*(1-2*(int)Math.round(Math.random()));
private int ydir=2*(1-2*(int)Math.round(Math.random()));
private boolean running=false;
private ThreadBall table=null;
protected int x,y;
public Marble(ThreadBall _table,int x,int y){
this.x=x;
this.y=y;
start();
}
public void start(){
running = true;
super.start();
}
public void halt(){
running=false;
}
public void run(){
while(running){
move();
try{
sleep(2);
}
catch(InterruptedException ie){
System.err.println("Thread Interrupted ! ");
}
table.repaint();
}
}
public void move(){
x+=xdir;
y+=ydir;
if(x>table.getSize().width||(x<0))
xdir*=(-1);
if(y>table.getSize().height||(y<0))
ydir*=(-1);
}
public void draw(Graphics g){
g.setColor(Color.blue);
g.fillOval(x, y, 5, 5);
}
}public class ThreadBall extends Frame implements ActionListener{
private Button bquit=new Button("Quit");
private Button bstart=new Button("Start");
private Button bstop=new Button("Stop");
private Marble marbles[]=new Marble[20];
public ThreadBall(){
super("Table with Marbles");
setLayout(new FlowLayout());
add(bquit);bquit.addActionListener(this);
add(bstart);bstart.addActionListener(this);
add(bstop);bstop.addActionListener(this);
validate();setSize(300,300);setVisible(true);
for(int i=0;i<marbles.length;i++){
int x=(int)(getSize().width*Math.random());
int y=(int)(getSize().height*Math.random());
marbles[i]=new Marble(this,x,y);
}
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==bstop)
for(int i=0;i<marbles.length;i++)
marbles[i].halt();
if(e.getSource()==bstart)
for(int i=0;i<marbles.length;i++){
marbles[i].halt();
marbles[i]=new Marble(this,marbles[i].x,marbles[i].y);
}
if(e.getSource()==bquit)
System.exit(0);
}
public void paint(Graphics g){
for(int i=0;i<marbles.length;i++)
{
if(marbles[i]!=null)
marbles[i].draw(g);
}
}
public static void main(String[] args){
ThreadBall tb=new ThreadBall();
}
}要求就是按Start小球能动,现在动不了