使用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
相关产品推荐
相关产品推荐

