运行新的LibGDX项目时出现“文件未找到”错误。

117
我尝试学习LibGDX,按照这里列出的软件清单在新的Eclipse 4.3上安装了全部软件,并在全新格式化的Mac OS X Maverick上安装。一切都很顺利,在重新启动后,我下载并执行了gdx-setup.jar文件,填写表格并导入到Eclipse中。运行桌面(右键单击桌面项目,选择“运行为 -> Java应用程序”),没有错误、没有警告,但我遇到了以下错误:
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load file: badlogic.jpg
at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:140)
at com.badlogic.gdx.graphics.glutils.FileTextureData.prepare(FileTextureData.java:64)
at com.badlogic.gdx.graphics.Texture.load(Texture.java:130)
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:121)
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:100)
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:92)
at com.diesel.bugs.DieselBugs.create(DieselBugs.java:21)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:136)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114)


Caused by: com.badlogic.gdx.utils.GdxRuntimeException: File not found: badlogic.jpg (Local)
at com.badlogic.gdx.files.FileHandle.read(FileHandle.java:134)
at com.badlogic.gdx.files.FileHandle.readBytes(FileHandle.java:218)
at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:137)

我在这里找到了很多类似的问题,尝试了所有方法,但都没有好的结果……昨晚我发现了这个,非常棒!我有最新的Java 1.8,一台Mac和完美的Eclipse……但是没有成功,我尝试了Java 1.6和1.7,总是出现相同的错误(找不到文件,我保留了Java 1.7)。我开始进行一些调试,这里是我对原始导入代码的唯一修改。
package com.diesel.bugs;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class DieselBugs extends ApplicationAdapter {
    SpriteBatch batch;
    Texture imgExternal,imgLocal;

    @Override
    public void create () {
        batch = new SpriteBatch();
        String pathLocal = Gdx.files.getLocalStoragePath();
        String pathExternal = Gdx.files.getExternalStoragePath();
        Boolean isExternal = Gdx.files.isExternalStorageAvailable();
        Boolean isLocal = Gdx.files.isLocalStorageAvailable();
        imgExternal = new Texture(Gdx.files.external("/Desktop/badlogic.jpg"));
        imgLocal = new Texture(Gdx.files.local("badlogic.jpg")); 
    }

    @Override
    public void render () {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        batch.draw(imgExternal, 0, 0);
        batch.end();
    }
}

奇怪的是,pathLocal等于""。 Gdx.files.getLocalStoragePath()返回空字符串是否正常?此外,
imgExternal = new Texture(Gdx.files.external("/Desktop/badlogic.jpg"));

效果很好。只有本地的一个出现错误,同时isLocal和isExternal返回true。

我尝试了许多组合,例如/assets/data/badlogic.jpg/assets/badlogic.jpg/data/badlogic.jpgdata/badlogic.jpgbadlogic.jpg

图片badlogic.jpg在那里,我放了多个地方以确保。

现在我需要帮助的原因是我在PC上尝试所有相同的步骤,一切都很好。

我的新mac和它的设置有什么问题?


很奇怪...在添加资源后,你是否在Eclipse中刷新了android项目?因为当我将新资产添加到android项目的资产文件夹中,然后忘记在Eclipse中刷新android项目时,这种情况经常发生,它会给我一个错误,说找不到图像... - florianbaethge
9个回答

229

来自libgdx维基

当你运行桌面项目时

  

应用程序将在第一次失败。打开刚创建的运行配置,并将工作目录设置为android/assets/目录!

将您的桌面项目链接到android资源文件夹?

转到Run => Run Configurations.. => 选择DesktopLauncher,参数选项卡=> 工作目录=> Others然后浏览到yourproject-android / assets /并单击Apply => Run

输入图像描述


为了帮助其他遇到同样问题的人,让相同的目录在Android构建中起作用,我们需要右键单击Android/assets目录,然后选择“Build Path”,并选择“Add”。 - lebill
11
我也因此解决了。可惜LibGDX从一开始就有这个问题,虽然它是一个很棒的系统,但是像这样的问题会吓跑那些耐心不太足的开发者。 - Richard
哇,这个可行。我看到了Eclipse的图片,但因为我使用IntelliJ而忽略了它们...好吧,它也适用于IntelliJ :) - Kenny Cason
1
如果您没有android/assets文件夹,以相同的方式设置desktop/assets文件夹对我有用。 - Fredrik Andersson
1
请注意,这不是解决方案,而是一种变通方法。它在大多数情况下都有效,但并非所有情况都适用。例如,如果您计划从桌面模块生成纹理图集,则必须重新计算路径,默认情况下路径是相对于桌面模块的。 - Fran Marzoa
显示剩余3条评论

76

对于我们使用Android Studio或IntelliJ IDEA的用户,需要按照以下步骤进行操作:

  1. 从菜单中选择" Run -> Edit Configurations "

  2. 在" Working Directory: "文本框中,将路径附加"/android/assets"

请注意,如果您使用gradle执行任务,则不会出现此问题。 gradle.build 文件已配置为使用 android 模块中的 assets 文件夹。


13
请注意,在设置中取消选中“Android”框的用户无法使用先前的答案。对于那些不关心部署Android的人,应该安装默认的assets文件夹。

5
正确无误,刚好遇到了;将桌面工作目录设置为核心中的资产文件夹对我有用。 - naftalimich
@naftalimich 是的,我认为资产应该真正属于核心。我理解他们这样做的原因,因为Android Gradle插件希望它们在那里,并且他们不想每次构建都处理复制所有内容/处理同步问题。但是这个问题确实需要解决。 - EntangledLoops

12

对于使用Intellij IDEA的用户:

  1. 运行 -> 编辑配置
  2. 在左边选择: 应用程序 -> DesktopLauncher
  3. 在“配置”选项卡中,在“工作目录”下选择您的android/assets路径

3
你可能需要提及:1)这需要你首先创建一个桌面配置。2)这假定你在生成原始项目时选择了Android。3)Code-Apprentice已经提供了这个答案,作为Android Studio的指令,它是建立在IntelliJ IDE之上的。 - EntangledLoops

6
这是正确的解决方法,不需要修改工作目录:
问题在于资产文件夹未正确标记为gradle构建的resources目录。要解决此问题,您需要在./core/build.gradle构建文件中添加以下行:
sourceSets.main.resources.srcDirs = [ "assets/" ]

最近使用最新版本的libGDX进行干净安装后,我的文件如下:

apply plugin: "java"

sourceCompatibility = 1.6
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

sourceSets.main.java.srcDirs = [ "src/" ]
sourceSets.main.resources.srcDirs = [ "assets/" ]

eclipse.project {
    name = appName + "-core"
}

1
我使用了一种不同的解决方案。
不是创建应用程序运行配置,而是创建Gradle构建配置。任务是desktop:run。一旦执行它,游戏(应该)启动并保持运行,资源应该会被找到。
我不确定为什么,但是当像这样运行Gradle任务时,资源会被找到。当使用应用程序运行配置(没有像当前接受的答案那样进行修改)时,它会崩溃,因为找不到资源。

1
我在IntelliJ中遇到了同样的问题,原因是我没有为Android生成libgdx项目(Android选项未被勾选),但我仍然遇到了相同的错误。我将工作目录链接到/core/assets而不是"/android/assets/",这对我来说很好用。

0

您可以检查工作目录或链接资源中资产的路径。完成后,请检查正在加载的文件。最后清理并刷新项目,尽情享受。


0
我没有 Android 项目。我的解决方案是将资产文件夹添加到 Java Build Path->Libraries 作为类文件夹。此外,在 Java Build Path->Order and Export 中检查资产文件夹,以便在其他项目中包含它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接