我正在制作Android游戏时出现了问题。在这个游戏中,“敌方太空船”将在随机时间发射激光爆炸。因此,为了做到这一点,我决定创建一个生成随机数的方法,如果生成的数字是4,那么将填充LaserBlasts的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:能在线程中创建处理程序, 尚未调用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
我编辑了我的答案,希望它会有所帮助。 –