我不知道这是否是一个简单的问题,但我就是看不出问题所在。我现在从 Google Play 中的应用程序中收到了三份关于 IndexOutOfBoundsException 的报告points.get(++i)
。
public GameThread(SurfaceHolder sHolder, Context context, Handler handler)
{
points = new ArrayList<Float>();
running = true;
mSurfaceHolder = sHolder;
}
protected void doDraw(Canvas canvas)
{
Paint p = new Paint();
p.setStyle(Paint.Style.FILL);
p.setColor(Color.WHITE);
for (int i = 0; i < points.size(); i++)
{
float x = points.get(i);
float y = points.get(++i);
canvas.drawPoint(x, y, p);
}
}
public boolean onTouchEvent(MotionEvent event)
{
float x = event.getX();
float y = event.getY();
points.add(x);
points.add(y);
return true;
}
它失败的索引是试图访问与其大小相等的位置(实际上一个错误说
java.lang.IndexOutOfBoundsException: Invalid index 2205, size is 2206
这对我来说根本没有意义),并且它的大小会有所不同。
我能看到这种情况发生的唯一方法是,如果由于某种原因只将一个对象添加到点,我不知道为什么会发生这种情况。onTouchEvent
不是在自己的线程中运行,是吗?