私はAndroidのゲームに問題を思い付いています。ゲームでは、「敵の宇宙船」は、ランダムな時間にレーザー爆弾を撃ちます。したがって、これを行うために乱数を生成するメソッドを作成することにしました。生成された数が4ならば、LaserBlastのArrayListが生成されます。ここでスレッド内のメソッド呼び出しで「スレッド内でハンドラを作成できません」例外が発生する
はメソッドです:
// generates random number which later is used to decide if shoot ot not
public static void generateRandomNumber(ArrayList<EnemyShipLaserBlast> listOfLaserBlasts) {
Random random = new Random();
int number = random.nextInt(30);
switch (number) {
case 1:
break;
case 2:
break;
case 3:
listOfLaserBlasts.add(new EnemyShipLaserBlast(5, 3));
Log.i("LASER BLAST WAS ADDED", "**************");
Log.i("size laser blasts " + listOfLaserBlasts.size(), "--------");
break;
case 4:
break;
}
私は(スレッドによって実行される)run()
メソッドからこのメソッドを呼び出すときしかし、私は
java.lang.RuntimeExceptionを得る:CAN がLooper.prepare()を呼び出していないスレッド内でハンドラを作成していません。
私run()
方法は次のようになります。
@Override
public void run() {
int frames = 0;
long startTime = System.nanoTime();
long currTime = 0;
long lastTime = System.nanoTime();
while (playing)
{
currTime = System.nanoTime();
update((currTime - lastTime)/ 1000000000.0f); //updates the game data
draw(); //draws the screen based on the game data
control(); //controls how long is it until the run() method is called again
lastTime = currTime;
frames = frames + 1;
if (System.nanoTime() - startTime > 100000000)
{
framesPerSecond = frames;
frames = 0;
startTime = System.nanoTime();
}
}
}
だから私は、私はどこか、このメソッドを置くべきか、多分この種の問題を解決する別の方法がある場合は君たちをお願いしたいと思いますか?
を編集し、**全体の**スタックトレースを投稿してください。 – CommonsWare
問題の 'Thread'と' Handler'を作成しているコードを見ることができたら助けになります。 – clownba0t
私は自分の答えを編集しました。うまくいけば助けになるでしょう。 –