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

使用Swing+JOGL创建窗口触发Index out of bound exception报错如何解决

报错原因
  • 核心是JOGL库在Windows平台下匹配OpenGL图形配置时触发的逻辑错误,空参构造GLCanvas时没有指定明确的OpenGL配置参数,JOGL遍历系统支持的图形配置时计算索引异常,触发数组越界。
  • JOGL版本与当前运行的JDK版本不兼容:若使用JDK 17运行,低于2.4.0版本的JOGL没有适配高版本JDK的AWT组件交互逻辑,WGL适配层处理配置参数错误。
  • 显卡驱动版本过旧,不支持JOGL默认请求的OpenGL版本,导致没有匹配的配置返回,内部逻辑出错。
解决方案
  • 统一运行环境:要么全用JDK 8搭配JOGL 2.3.x版本,要么全用JDK 17搭配JOGL 2.4.0及以上版本,不要混用不同版本的JDK编译和运行代码。
  • 初始化GLCanvas时主动指定OpenGL配置,替换原有的空参构造逻辑,参考代码如下:
public Code() {
    setTitle("Chapter2 - program1");
    setSize(800, 600);
    setLocation(400, 400);
    // 主动指定GL配置
    GLProfile profile = GLProfile.get(GLProfile.GL4);
    GLCapabilities caps = new GLCapabilities(profile);
    caps.setRedBits(8);
    caps.setGreenBits(8);
    caps.setBlueBits(8);
    caps.setAlphaBits(8);
    caps.setDepthBits(24);
    myCanvas = new GLCanvas(caps);
    myCanvas.addGLEventListener(this);
    this.add(myCanvas);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
}
  • 如果指定GL4版本仍报错,可将GLProfile.get(GLProfile.GL4)替换为兼容性更强的GLProfile.get(GLProfile.GL2)或GLProfile.get(GLProfile.GL2ES2),适配更低版本的OpenGL环境。
  • 启动程序时添加JVM参数:-Djogamp.gluegen.UseTempJarCache=false,避免缓存损坏导致的配置加载异常。
  • 更新显卡驱动到官方最新版本,排除驱动层不支持OpenGL的问题。

内容的提问来源于stack exchange,提问作者McHulotte

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:36:03