线程正常工作时抛出ArrayIndexOutOfBoundsException

时间:2019-05-23 15:35:47

标签: android indexoutofboundsexception android-thread

我正在使用线程将颜色设置为ImageView之后的Thread.sleep列表。它可以正常工作,但是经过Thread几次循环后,我的应用程序停止运行并抛出ArrayIndexOutOfBoundsException

private Runnable runnable = new Runnable() {

        int position = 0;

        @Override
        public void run() {
            while (true) {
                if (position >= MAX_ITEM) {
                    position = 0;
                }
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        for (int i = 0; i < itemIndicators.size(); i++) {
                            itemIndicators.get(i).setSelected(false);
                        }
                        if (position >= 0){
                            itemIndicators.get(position-1).setSelected(true);
                        }
                    }
                });

                position++;

                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

        }
    };

我的列表的大小与MAX_ITEM的数字相同。 请帮助我。非常感谢!

2 个答案:

答案 0 :(得分:1)

如果位置为0,则您正在访问索引为-1的项

if (position >= 0) {
    itemIndicators.get(position-1).setSelected(true);
}

删除-1。

答案 1 :(得分:1)

您的错误是由此行引起的

  if (position >= 0){
     itemIndicators.get(position-1).setSelected(true);
   }

您应该将条件修改为position > 0以避免获得get(-1)