You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 22:17:40