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

LibGDX导出Jar文件无法检测到资源的问题求助

问题

使用控制台命令gradlew desktop:dist构建LibGDX项目的Jar文件,构建成功,但运行时程序立即崩溃。通过命令行查看输出发现所有资源均无法被找到。

使用Eclipse开发,在IDE中程序运行完全正常,且已正确配置资源文件夹到构建路径。奇怪的是,打开导出的Jar文件后,里面确实包含了所有应有的资源。

运行以下测试代码:

FileHandle test = Gdx.files.internal("levels/default/level1.png");
if (test.exists())
    System.err.println("exists!");

尽管Jar内存在该路径对应的资源,但代码仍无法找到文件。也曾尝试使用Java内置的File类获取文件,同样在IDE中正常,但导出Jar后出现相同问题。请问这是为什么?

解决分析
  • 路径大小写不匹配:LibGDX的internal文件读取在Jar运行时对路径大小写严格敏感,但IDE(尤其是Windows系统环境)的文件系统默认不区分大小写。检查代码中写的路径和Jar内实际资源的路径大小写是否完全一致,比如代码里的levels/default/level1.png,Jar内实际会不会是Levels/Default/Level1.png。
  • 资源打包路径偏移:Gradle构建时可能把资源放到了Jar内的子目录下,而非根路径。打开Jar文件确认资源的实际位置,比如是不是在assets/levels/default/level1.png而非根目录下的levels/...。如果是这种情况,要么修改代码中的路径为实际打包路径,要么调整Gradle配置让资源直接打包到Jar根目录。
  • Java File类不支持Jar内资源访问:Java原生File类只能访问文件系统中的真实文件,无法读取Jar归档里的资源条目。必须使用LibGDX的FileHandle或者Java的getResourceAsStream来读取Jar内的资源,不能用File类。
  • Gradle构建配置有误:检查desktop模块的build.gradle文件,确认资源复制任务配置正确。确保sourceSets.main.resources.srcDirs指向了正确的资源文件夹,示例配置如下:
    sourceSets {
        main {
            resources {
                srcDirs = ["../core/assets"]
            }
        }
    }
    
    同时确认dist任务没有设置规则排除资源文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:07:06