Java 我的实时壁纸实现中的IndexOutOfBoundsException
方法changeFlowers失败,出现索引越界异常 我是java新手,我正在调用已经实例化的FishOne(Arraylist rederable类)的方法“changeColor()” 但它失败了,出现了索引越界异常Java 我的实时壁纸实现中的IndexOutOfBoundsException,java,android,rendering,live-wallpaper,indexoutofboundsexception,Java,Android,Rendering,Live Wallpaper,Indexoutofboundsexception,方法changeFlowers失败,出现索引越界异常 我是java新手,我正在调用已经实例化的FishOne(Arraylist rederable类)的方法“changeColor()” 但它失败了,出现了索引越界异常 public void changeFlowers(int i) { FlowerOne f1 = (FlowerOne)(this._fishes.get(i)); // Is this the right way to call ????
public void changeFlowers(int i)
{
FlowerOne f1 = (FlowerOne)(this._fishes.get(i)); // Is this the right way to call ????
f1.changeColor(this._theme);
}
下面的代码为quantial.java,FishOne.java
提前谢谢你的帮助
水族馆,
这取决于完整的逻辑,代码如何是错误安全的。基本上,如果您确定changeFlowers不会在参数i大于ArrayList大小的情况下调用,那么您可以在changeFlowers函数中设置vheck 像
但最好是使代码从调用该函数的地方安全起来,因为实际问题就在那里以上代码将停止错误,但您还需要更正调用函数的位置。您如何调用该方法?索引大于_fishesarraylist'大小,请检查i和_fishes.size()Hi npinti,这是我调用方法f1.changeColor(this.\u主题)的方式;
public class Aquarium {
private AquariumThread _aquariumThread;
private SurfaceHolder _surfaceHolder;
private ArrayList<Renderable> _fishes;
private Bitmap _backgroundImage;
private Context _context;
public void render(){
Canvas canvas = null;
try{
canvas = this._surfaceHolder.lockCanvas(null);
synchronized (this._surfaceHolder) {
this.onDraw(canvas);
}
}finally{
if(canvas != null){
this._surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
protected void onDraw(Canvas canvas) {
this.renderBackGround(canvas);
for (Renderable renderable : this._fishes) {
renderable.render(canvas);
}
};
public void initialize(Context context, SurfaceHolder surfaceHolder) {
this._fishes = new ArrayList<Renderable>();
}
protected void onDraw(Canvas canvas) {
this.renderBackGround(canvas);
for (Renderable renderable : this._fishes) {
renderable.render(canvas);
}
};
public void start(){
this._aquariumThread.switchOn();
}
public void stop(){
boolean retry = true;
this._aquariumThread.switchOff();
while (retry) {
try {
this._aquariumThread.join();
retry = false;
} catch (InterruptedException e) {
// we will try it again and again...
}
}
}
public synchronized void addFishes() {
Point startPoint1 = new Point(1,300);
this._fishes.add(new fishOne(this._context, this, startPoint1, 90));
Point startPoint2 = new Point(100,300);
this._fishes.add(new fishOne(this._context, this, startPoint2, 90));
Point startPoint3 = new Point(200,300);
this._fishes.add(new fishOne(this._context, this, startPoint3, 90));
}
public void changeFlowers(int i)
{
FlowerOne f1 = (FlowerOne)(this._fishes.get(i));
f1.changeColor(this._theme);
}
}
public class fishOne extends Animal {
private static final int TOTAL_FRAMES_IN_SPRITE = 1;
private static final int CLOWN_FISH_FPS = 1;
int _fishColor;
Bitmap leftBitmap;
Bitmap rightBitmap;
public fishOne(Context context, Aquarium aquarium, Point startPoint, int speed){
super(context, aquarium);
this.changeColor(1);
this.initialize(this.leftBitmap, this.rightBitmap, CLOWN_FISH_FPS, TOTAL_FRAMES_IN_SPRITE, startPoint, speed);
}
public void changeColor(int mfishColor)
{
switch(mfishColor) {
case 1:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPurgeable = true;
this.leftBitmap = BitmapFactory.decodeResource(getContext().getResources(), com.gotit.livewallpaper.fishshd.R.drawable.fish1, options);
BitmapFactory.Options options1 = new BitmapFactory.Options();
options1.inPurgeable = true;
this.rightBitmap = BitmapFactory.decodeResource(getContext().getResources(), com.gotit.livewallpaper.fishshd.R.drawable.fish2, options1);
break;
case 2:
BitmapFactory.Options options2 = new BitmapFactory.Options();
options2.inPurgeable = true;
this.leftBitmap = BitmapFactory.decodeResource(getContext().getResources(), com.gotit.livewallpaper.fishshd.R.drawable.redfish1, options2);
BitmapFactory.Options options3 = new BitmapFactory.Options();
options3.inPurgeable = true;
this.rightBitmap = BitmapFactory.decodeResource(getContext().getResources(), com.gotit.livewallpaper.fishshd.R.drawable.redfish2, options3);
break;
default:
}
}
public void render(Canvas canvas){
super.render(canvas);
}
}
public void changeFlowers(int i)
{
if(null!=this._fishes && this._fishes.size()>i){
FlowerOne f1 = (FlowerOne)(this._fishes.get(i));
f1.changeColor(this._theme);
}
}