0

アプリケーションを実行してビットマップに触れると、アプリケーションがクラッシュすることがあります

エラーは次のとおりです。

at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
at java.util.ArrayList.get(ArrayList.java:304)
at com.example.Game.GFXSurface$GameSurface.run(GFXSurface.java:135)
at java.lang.Thread.run(Thread.java:864)

そして、それがクラッシュするコードと、削除するballs.removeballs.addすべてが正常に機能しますが、新しいボールは生成されず、実行メソッドではすべてが正常に機能し、次のようにremoveなりaddます。

@Override
public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
    GameSurface gamesurface = new GameSurface(this);
    x = event.getX();
    y = event.getY();
    Bitmap ball = BitmapFactory.decodeResource(getResources(),
            R.drawable.ic_launcher);
    for (int i = 0; i < 4; i++)
        if (ourSurfaceView.MouseOnDot(ball) && x >= ballX[i]
                && x <= ballX[i] + 72) {
            balls.remove(i);
            balls.add(i, gamesurface.RandomBall());
            ChangingY[i] = 0;
            if (speed <= 7)
                speed += 0.1;
        }
    return false;
}

これがballs.getのメソッドです

@Override
        public void run() {

            for (int j = 0; j < 4; j++) {
                balls.add(j, RandomBall());
            }

            while (isRunning) {
                if (!ourHolder.getSurface().isValid())
                    continue;

                Canvas canvas = ourHolder.lockCanvas();
                canvas.drawRGB(02, 02, 150);

                for (int i = 0; i < 4; i++) {
                    ballX[i] = i * 155;
                    canvas.drawBitmap(balls.get(i), ballX[i], ChangingY[i],
                            null);
                    if (ChangingY[i] <= canvas.getHeight()) {
                        ChangingY[i] += 1 * speed;
                    } else if (ChangingY[i] > canvas.getHeight()) {
                        ChangingY[i] = 0;
                        if (speed <= 5)
                            speed += 0.25;
                        balls.remove(i);
                        balls.add(i, RandomBall());

                    }
                }

                // }

                ourHolder.unlockCanvasAndPost(canvas);
            }
        }
4

1 に答える 1

2

エラーは、ArrayList へのアクセスに使用するインデックスが ArrayList のサイズよりも大きいことを意味します。

for (int i = 0; i < 4; i++) の代わりに for (int i = 0; i < ball.size(); i++) を使用してみてください

または、balls.remove(i) を使用する場合は、最初に i < balls.size を確認してください。

于 2012-09-15T10:58:06.753 に答える