Привет, я сделал эту программу, которая создает максимум 15 шаров, случайно помещенных на экран, и каждый из них имеет свою собственную runnable, однако моя проблема в том, что runnable работает только один раз при каждом нажатии кнопки, когда я хочу, чтобы он постоянно проверял см., если мяч вне пределов. Как бы это сделать, я перемещаю реализацию runnable в paintComponent, и это работает, но я не хочу этого делать.Как я могу реализовать свою runnable, чтобы проверить рекурсивно?
Вот код, который выполняется при каждом нажатии кнопки;
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;
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);
}
}
}
}
Это повторение для всех четырех сторон.
Возможно, я не могу сделать это, не заставляя приложение замораживаться, и мне нужно, чтобы он работал в фоновом режиме как его просто контролер. –
Тогда не позволяйте потоку обработки событий присоединиться к нему. –