如何实现我的runnable来检查recursivly?

时间:2016-11-23 22:12:53

标签: java multithreading graphics runnable

您好我已经制作了这个程序,最多可以在屏幕上随机放置15个球,每个球都有自己的可运行,但是,我的问题是,当我希望它连续检查时,每次按下按钮只能运行一次看看球是否超出范围。我将如何做到这一点我将runnable的实现移动到paintComponent中它可以工作,但我不想这样做。

以下是每按一次按钮执行的代码;

public static void addBall() throws InterruptedException {
    Ball.balls[BallListener.balls] = new Ball();
    ballPanel.add(Ball.balls[BallListener.balls]);
    Runnable r = new BallRunnable();
    Thread t1 = new Thread(r);
    t1.start();
   try {
        t1.join();
    } catch (InterruptedException ex) {
        Logger.getLogger(BallComponent.class.getName()).log(Level.SEVERE, null, ex);
    }
}

需要让它为多个球重复运行runnable,我也希望每个球都有自己的runnable。这是runnable的代码;

public class BallRunnable implements Runnable {

private static Random rand = new Random();
public static double speed = 0.2f;
public static boolean end = false;

public BallRunnable() {

}

public void run() {
    boundsCheckY1();
    boundsCheckX1();
    boundsCheckY2();
    boundsCheckX2();
}

public void boundsCheckX1() {
    int temp;

    for (int i = 0; i < BallListener.balls; i++) {
        double x = Ball.balls[i].getXCo();
        if (x < 1) {
            temp = rand.nextInt(5) + 1;

            if (temp == 1) {
                Ball.balls[i].setGoRight(true);
                Ball.balls[i].setGoLeft(false);
                Ball.balls[i].setGoUp(false);
                Ball.balls[i].setGoDown(false);
                Ball.balls[i].setDiagonalUp(false);
                Ball.balls[i].setDiagonalDown(false);
            } else if (temp == 2) {
                Ball.balls[i].setGoRight(true);
                Ball.balls[i].setGoLeft(false);
                Ball.balls[i].setGoUp(true);
                Ball.balls[i].setGoDown(false);
                Ball.balls[i].setDiagonalUp(false);
                Ball.balls[i].setDiagonalDown(false);
            } else if (temp == 3) {
                Ball.balls[i].setGoRight(true);
                Ball.balls[i].setGoLeft(false);
                Ball.balls[i].setGoUp(false);
                Ball.balls[i].setGoDown(true);
                Ball.balls[i].setDiagonalUp(false);
                Ball.balls[i].setDiagonalDown(false);
            } else if (temp == 4) {
                Ball.balls[i].setGoRight(true);
                Ball.balls[i].setGoLeft(false);
                Ball.balls[i].setGoUp(false);
                Ball.balls[i].setGoDown(false);
                Ball.balls[i].setDiagonalUp(true);
                Ball.balls[i].setDiagonalDown(false);

            } else if (temp == 5) {
                Ball.balls[i].setGoRight(true);
                Ball.balls[i].setGoLeft(false);
                Ball.balls[i].setGoUp(false);
                Ball.balls[i].setGoDown(false);
                Ball.balls[i].setDiagonalUp(false);
                Ball.balls[i].setDiagonalDown(true);
            }
        }
    }
}

这对所有4个方面重复。

1 个答案:

答案 0 :(得分:0)

听起来好像你不希望新线程完成,如果是这样的话,在run方法中放一个循环并保持适当的休眠间隔以保持线程活着。