Java Eclipse运行时ArrayIndexOutOfBoundsException异常排查求助(Java3D QuadArray创建立方体场景)
解决Java 3D中QuadArray数组越界异常的方案
Hey,我一眼就看出问题出在哪了——你遇到的ArrayIndexOutOfBoundsException完全是因为**QuadArray的初始化容量不够,还存在索引重复使用的问题**。
问题根源分析
你创建QuadArray的时候写的是:
QuadArray polygon1 = new QuadArray (12, QuadArray.COORDINATES);
这意味着这个数组只能存储12个坐标点(索引范围是0到11)。但你在绘制左侧面的时候:
- 先重复使用了已经分配给右侧面的索引11
- 还尝试使用12、13、14这些超出数组长度的索引,这直接触发了越界异常。
修复方案
你要创建4个面(前、后、右、左),每个面需要4个坐标点,总共是4*4=16个点,所以首先要把QuadArray的容量改成16,然后修正左侧面的索引,从12开始依次赋值:
修改后的Make方法代码如下:
public Node Make(float Size) { // 把容量从12改成16,容纳4个面的16个点 QuadArray polygon1 = new QuadArray (16, QuadArray.COORDINATES); //Front polygon1.setCoordinate(0, new Point3f (0f, 0f, 0f)); polygon1.setCoordinate(1, new Point3f (Size, 0f, 0f)); polygon1.setCoordinate(2, new Point3f (Size, Size, 0f)); polygon1.setCoordinate(3, new Point3f (0f, Size, 0f)); //Back polygon1.setCoordinate(4, new Point3f (0f, 0f, -Size)); polygon1.setCoordinate(5, new Point3f (Size, 0f, -Size)); polygon1.setCoordinate(6, new Point3f (Size, Size, -Size)); polygon1.setCoordinate(7, new Point3f (0f, Size, -Size)); //Right polygon1.setCoordinate(8, new Point3f (Size, 0f, 0f)); polygon1.setCoordinate(9, new Point3f (Size, Size, 0f)); polygon1.setCoordinate(10, new Point3f(Size, Size, -Size)); polygon1.setCoordinate(11, new Point3f(Size, 0f, -Size)); //Left - 修正索引,从12开始,不再重复使用11 polygon1.setCoordinate(12, new Point3f (0f, 0f, 0f)); polygon1.setCoordinate(13, new Point3f (0f, Size, 0f)); polygon1.setCoordinate(14, new Point3f(0f, Size, -Size)); polygon1.setCoordinate(15, new Point3f(0f, 0f, -Size)); shape = new Shape3D(polygon1); return shape; }
额外提示
如果之后你要给立方体加上顶面和底面,记得把QuadArray的容量再增加8(每个面4个点),也就是改成24,然后继续按顺序给新的索引赋值就好,别再出现索引重复或者超出容量的情况啦。
内容的提问来源于stack exchange,提问作者Hoax
相关产品推荐
相关产品推荐

