繁体   English   中英

onTick java.lang.ArrayIndexOutOfBoundsException

[英]onTick java.lang.ArrayIndexOutOfBoundsException

我有一个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();
}

这是我从崩溃报告中获取的错误。 也许我有更好的方法可以对此进行动画处理?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM