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

LibGDX加载GIF动画时抛出IllegalArgumentException异常求助

LibGDX加载GIF动画时抛出IllegalArgumentException异常求助

嘿,碰到这个问题别慌,咱们一步步来拆解分析~

先把你遇到的错误栈贴出来,方便定位问题:

Error:
java.lang.IllegalArgumentException: capacity < 0: (-1611268096 < 0)
    at java.base/java.nio.Buffer.createCapacityException(Buffer.java:279)
    at java.base/java.nio.Buffer.<init>(Buffer.java:242)
    at java.base/java.nio.ByteBuffer.<init>(ByteBuffer.java:288)
    at java.base/java.nio.ByteBuffer.<init>(ByteBuffer.java:296)
    at java.base/java.nio.MappedByteBuffer.<init>(MappedByteBuffer.java:112)
    at java.base/java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:170)
    at com.badlogic.gdx.graphics.g2d.Gdx2DPixmap.newPixmap(Native Method)
    at com.badlogic.gdx.graphics.g2d.Gdx2DPixmap.<init>(Gdx2DPixmap.java:137)
    at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:137)
    at com.tds.game.GifDecoder.getAnimation(GifDecoder.java:697)
    at com.tds.game.GifDecoder.loadGIFAnimation(GifDecoder.java:731)
    at com.tds.game.AfterBossScreen.show(AfterBossScreen.java:26)
    at com.badlogic.gdx.Game.setScre...

从错误信息和栈跟踪来看,核心问题是加载GIF时,底层计算Pixmap的缓冲区容量得到了一个负数,这明显不符合逻辑,大概率是这几个原因导致的:

  • GIF文件本身异常:比如文件损坏、导出时格式不规范,或者帧的宽高数值异常超大,导致宽高相乘时int类型溢出变成负数。这种情况在网上下载的GIF或者导出出错的文件里很常见。
  • 自定义GifDecoder的逻辑bug:你用的是项目内的com.tds.game.GifDecoder,可能在解析GIF帧尺寸、计算缓冲区容量时没做溢出防护,导致数值异常。
  • 文件加载路径错误:如果加载的文件不存在、路径拼写错误,或者读取到空数据流,也可能触发这类解析异常。

给你几个按优先级排序的解决思路:

  1. 替换测试GIF文件:找一个确定没问题的简单GIF(比如小尺寸的循环动画),替换当前加载的文件,看看是否还报错。如果问题消失,那就是原GIF的问题,用PS、GIMP这类软件重新导出修复即可。
  2. 检查文件加载路径:确认AfterBossScreen.java第26行里的GIF加载路径是否正确,文件是否确实放在assets目录对应位置,有没有大小写或者路径分隔符的错误。
  3. 排查GifDecoder的容量计算逻辑:如果是自己实现的GifDecoder,去看getAnimation方法(第697行)里的容量计算代码,把宽高先转成long类型计算,再判断结果是否在int的合理范围(0到2^31-1)内,避免溢出。
  4. 换用成熟的GIF加载方案:如果自定义Decoder问题较多,可以试试LibGDX社区常用的稳定GIF加载库,避免自己造轮子踩坑。

备注:内容来源于stack exchange,提问作者Prostoblodi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 09:17:58