onTick java.lang.ArrayIndexOutOfBoundsException

时间:2011-10-21 17:34:10

标签: android

我有一个yahtzee(骰子游戏),玩家掷5个骰子。我使用倒数计时器做一个小动画,其中所有骰子显示为“1”然后“2”然后“3”然后“4”然后所有骰子应该转到随机数。在模拟器和我测试它的任何手机上,这似乎在100%的时间正常工作...因为我已经在Android市场上发布了我的游戏我已经有数百个崩溃报告抱怨这个错误,似乎与这个动画有关。从用户消息判断,它看起来像是所有“6”,然后关闭力量。

这是代码:

public void animateDize(){
    new CountDownTimer(900,150){ 

        Integer j = 0;

        @Override
        public void onTick(long millisUntilFinished) {
            for(int i = 0; i < 5; i++){
                if(DieSet[i]== 0){                                      // If dice are not clicked, animate them
                    imageButtons[i].setBackgroundResource(imageRes[j]);
                }
            }
            j ++;          
        }
        @Override
        public void onFinish() {

            randomDize();                                               // Set dice to random values
            }
    }.start();
}

以下是我从崩溃报告中收到的错误。也许我有更好的方式来改变它的动画?

  

java.lang.ArrayIndexOutOfBoundsException at   com.surreall.yatzee.yatzee $ 7.onTick(yatzee.java:649)at at   android.os.CountDownTimer $ 1.handleMessage(CountDownTimer.java:124)at at   android.os.Handler.dispatchMessage(Handler.java:99)at   android.os.Looper.loop(Looper.java:123)at   android.app.ActivityThread.main(ActivityThread.java:4627)at   java.lang.reflect.Method.invokeNative(Native Method)at   java.lang.reflect.Method.invoke(Method.java:521)at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:860)   在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)at   dalvik.system.NativeStart.main(原生方法)

2 个答案:

答案 0 :(得分:2)

基于我们在此处看到的代码,看起来j会变得越来越大,直到它太大而不能成为数组imageRes的索引,此时你会得到这个例外。如果我们看到更多的代码,我可能会有不同的解释,但基于此,这似乎是一个可能的解释。

答案 1 :(得分:1)

看起来j的值在onTick()方法的第7个刻度上为6。我假设你只有6个骰子图像,这意味着它到达imageRes[5]后会尝试转到imageRes[6],我假设它不存在(索引值为6是第7个指数值,骰子只有6个方面)。这是我能看到的唯一解释。