2017-03-19 163 views
-1

我最近上傳了我的應用程序到谷歌播放商店Helicopter Combat 但時不時地它崩潰了。我得到了錯誤報告在這裏:我的應用程序突然停止

java.lang.ArrayIndexOutOfBoundsException: length=3; index=3 
    at de.krissini.server.Animation.getImage(Animation.java:36) 

這就是refered代碼:

public class Animation { 

    private Bitmap[] frames; 
    private int currentFrame; 
    private long startTime, delay; 
    private boolean playedOnce; 

    public void setFrames(Bitmap[] frames){ 
     this.frames = frames; 
     currentFrame = 0; 
     startTime = System.nanoTime(); 
    } 

    public void setDelay(long d){ 
     delay = d; 
    } 
    public void setFrame(int i){ 
     currentFrame = i; 
    } 
    public void update(){ 
     long elapsed = (System.nanoTime()-startTime)/1000000; 
     if(elapsed>delay){ 
      currentFrame++; 
      startTime = System.nanoTime(); 
     } 
     if(currentFrame == frames.length){ 
      currentFrame = 0; 
      playedOnce = true; 
     } 
    } 
    public Bitmap getImage(){ 
     return frames[currentFrame];  // line 36 
    } 
    public int getFrame(){ 
     return currentFrame; 
    } 
    public boolean playedOnce(){ 
     return playedOnce; 
    } 

} 

我理解錯誤,但我該如何預防呢? 我很感謝每一個答案

回答

1

錯誤是由誤認爲一個數組的長度是一樣的最大指數造成的。其中長度從1開始,指數從0開始,他們總是相差1

更改此:

if(currentFrame == frames.length){ 
    // your reset code 
} 

要這樣:

if(currentFrame == frames.length - 1){ 
    // your reset code 
} 
+0

我認爲它的工作,謝謝 – krissini