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

