2016-11-23 3 views
0

こんにちは私は、画面に無作為に配置された最大15個のボールを作成するプログラムを作っていますが、それぞれに独自のランナブルがありますが、問題はランナブルが各ボタンのプレスで一度だけ実行されるということです。ボールが範囲外であるかどうかを確認します。私はこれをどうすればよいでしょうか?私は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); 
    } 
} 

それは、複数のボールに繰り返し実行可能を実行し、私はまた、各ボールを持っていると思いますので、それを行う必要があり、独自の実行可能なを持っています。ここには実行可能ファイルのコードがあります。

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つの側面すべてで繰り返されます。

答えて

0

新しいスレッドを完了させたくない場合は、適切なスリープ間隔でrunメソッド内にループを置いてスレッドを有効にします。

+0

私は、アプリケーションをフリーズさせることなくこれを行うことはできません。ちょうどチェッカーとしてバックグラウンドで実行する必要があります。 –

+1

それから、あなたのイベント処理スレッドはそれに参加させないでください。 –

関連する問題