求助!反弹球问题(模拟气泡屏保)
有个问题想请教大家 我想写一个模拟的那种气泡屏保的程序 我想实现 单击鼠标就多一个球出来 但是不知道为什么始终只能有一个球出现 敬请大侠解惑 代码如下:
package homeWork;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JApplet;
public class Ball extends JApplet implements Runnable {
private static final long serialVersionUID = 1L;
private Thread blueBall[]=new Thread[20];
private boolean xUp, yUp, bouncing;// 标记是否撞墙,小球是否开始运动
private int x, y, xDx, yDy;// x,y的增量
private final int MAX_X = 200, MAX_Y = 200;// applet的大小
private boolean direction[]= {true,false};//方向数组
private int count=0;//计数器
public void init() {
xUp = direction[(int)(Math.random()*2)];//初始方向随机
yUp = direction[(int)(Math.random()*2)];
xDx = 1;
yDy = 1;
bouncing = false;
addMouseListener(new MouseListener() {// 监听鼠标事件
public void mousePressed(MouseEvent event) {// 按下鼠标
// createBall(event);// 创建小球
}
public void mouseExited(MouseEvent event) {
}
public void mouseClicked(MouseEvent event) {
createBall(event);
count++;
}
public void mouseReleased(MouseEvent event) {
}
public void mouseEntered(MouseEvent event) {
}
});
setSize(MAX_X, MAX_Y);
}
private void createBall(MouseEvent event) {
if (blueBall[count] == null) {
x = event.getX();
y = event.getY();
blueBall[count] = new Thread(this);
bouncing = true;
blueBall[count].start();// 开始线程
}
}
public void stop() {
for (int i = 0; i <=count ; i++) {
blueBall[i] = null;
}
}
public void paint(Graphics g) {
super.paint(g);
if (bouncing) {
g.setColor(Color.blue);
g.fillOval(x, y, 10, 10);
}
}
public void run() {
while (true) {
try {
blueBall[count].sleep(20);// 等待其他准备工作
} catch (InterruptedException exception) {
// TODO: handle exception
System.err.println(exception.toString());
}
// 确定小球的方向
if (xUp == true)
x += xDx;
else
x -= xDx;
if (yUp == true)
y += yDy;
else
y -= yDy;
// 确定下一步
if (y <= 0) {
yUp = true;
yDy = (int) (Math.random() * 5 +1);//避免出现重复在两个位置对弹
} else if (y >= MAX_Y - 10) {
yDy = (int) (Math.random() * 5 +1);
yUp = false;
}
if (x <= 0) {
xUp = true;
xDx = (int) (Math.random() * 5 + 1);
} else if (x >= MAX_X - 10) {
xDx = (int) (Math.random() * 5 + 1);
xUp = false;
}
repaint();
}
}
}
好像,一单击,之前的线程就中断了。