我如何实现我的 runnable 以递归检查?
How do i implement my runnable to check recursivly?
你好,我制作了这个程序,最多可以创建 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。这是可运行代码;
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 个边重复。
听起来您不希望新线程完成,如果是这样,请在 运行 方法中放置一个循环,并设置适当的睡眠间隔以保持线程处于活动状态。
你好,我制作了这个程序,最多可以创建 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。这是可运行代码;
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 个边重复。
听起来您不希望新线程完成,如果是这样,请在 运行 方法中放置一个循环,并设置适当的睡眠间隔以保持线程处于活动状态。