运行新的 LibGDX 项目时“找不到文件”
Posted
技术标签:
【中文标题】运行新的 LibGDX 项目时“找不到文件”【英文标题】:"File not found" when running new LibGDX project 【发布时间】:2014-05-14 09:42:00 【问题描述】:我尝试学习 LibGDX,我在新格式化的 mac OS X Maverick 上安装了 here 列出的所有软件和新的 Eclipse 4.3。
一切顺利,重新启动后,我下载并执行 gdx-setup.jar,填写表格,然后导入 Eclipse。
当我尝试运行桌面时,没有错误,没有警告。 (右键桌面项目,Run As -> Java Application)。
我收到了这个错误
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)
我在这里发现了很多类似的问题,我都尝试了,但没有任何好的结果...昨晚我找到了this,非常酷我有最新的Java 1.8,一个mac,和Eclipse完美契合...
但没有成功,我尝试使用 Java 1.6 和 1.7,总是同样的错误(未找到文件,我保留 Java 1.7)
我开始做一些debug,这里我只修改导入生成的原始代码。
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.jpg
、data/badlogic.jpg
和 badlogic.jpg
。
图片 badlogic.jpg 在那里,我把它放在多个地方以确保它。
现在我在这里寻求帮助的原因是我只是在 PC 上尝试所有相同的步骤并且一切正常。
我的新 Mac 及其设置有什么问题?
【问题讨论】:
这很奇怪...您在添加资产后刷新了 Eclipse 中的 android-project 吗?因为当我向 android-project 中的资产文件夹添加新资产然后忘记在 Eclipse 中刷新 android 项目时,这种情况经常发生,它会给我一个错误,说图像不存在...... 【参考方案1】:来自 libgdx 维基
当您运行桌面项目时
应用程序将在第一次失败。打开刚刚创建的运行配置,将工作目录设置为android/assets/目录!
将您的桌面项目链接到 android assets 文件夹?
转到 Run => Run Configurations.. => 选择 DesktopLauncher,Arguments Tab => Working Directory => Others 然后浏览到yourproject-android/assets/ 并点击 Apply => Run
【讨论】:
也为了帮助其他有同样问题的人,为了使同一目录与 Android 构建一起工作,我们需要右键单击 Android / assets 目录并单击构建路径并选择添加它。 我也这样做了。 LibGDX 从一开始就存在这个问题真是太可惜了——它是一个很棒的系统,但是这样的事情会吓跑没有耐心的开发人员。 太棒了! libgdx 用文本字段替换图像到示例项目解释这样做不是更有意义吗?我想一个简单的谷歌搜索无论如何都会把每个人都带到这里,但无论如何,遇到这种事情很奇怪 如果你没有 android/assets 文件夹,设置 desktop/assets 文件夹对我来说同样有效。 请注意,这不是解决方案,而是解决方法。它在大多数情况下都有效,但并非在所有情况下都有效。例如,如果您计划从 Desktop 模块生成纹理图集,则必须重新计算路径,默认情况下,这些路径是相对于 Desktop 模块的。【参考方案2】:对于我们这些使用 Android Studio 或 IntelliJ IDEA 的人,您需要按照以下步骤操作:
从菜单中选择运行 -> 编辑配置
在“工作目录:”文本框中,将“/android/assets”附加到路径。
请注意,如果您使用 gradle 执行任务,这不是问题。 gradle.build 文件配置为使用 android 模块中的 assets 文件夹。
【讨论】:
【参考方案3】:请注意,之前的答案不适用于在设置时取消选中“Android”框的用户。确实应该为那些不关心为 Android 部署的人安装一个默认资产文件夹。
【讨论】:
正确无误,刚好碰到;将桌面工作目录设置为核心中的资产文件夹对我有用。 @naftalimich 是的,我认为资产真的应该是核心。我理解他们为什么这样做,因为 android gradle 插件希望他们在那里,并且他们不想处理每个构建的所有内容/处理同步问题。但这确实应该得到解决。【参考方案4】:对于那些使用 Intellij IDEA 的人:
-
运行 -> 编辑配置
在左侧选择:Application -> DesktopLauncher
在“配置”选项卡中,在“工作目录”下选择您的 android/assets 路径
【讨论】:
您可能会提到:1)这需要您首先创建一个桌面配置。 2) 这假设您在生成原始项目时选择了 android。 3) 这个答案已经由上面的 Code-Apprentice 作为 Android Studio 的说明提供,它是基于 IntelliJ IDE 构建的。【参考方案5】:这就是你如何正确修复它而不用玩弄工作目录:
问题是资产文件夹未正确标记为 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"
【讨论】:
【参考方案6】:我使用不同的解决方案。
创建 Gradle 构建配置,而不是创建应用程序运行配置。任务是desktop:run
。执行后,游戏(应该)启动并保持活动状态而不会崩溃,并且应该找到资源。
我不确定为什么,但是当像这样运行 Gradle 任务时,会找到资源。当使用应用程序运行配置时(没有像当前接受的答案那样的修改)它会崩溃,因为它找不到资源。
【讨论】:
【参考方案7】:我在 IntelliJ 中遇到了同样的问题,并且我没有为 Android 生成 libgdx 项目(Android 选项未标记为选中)并且我还遇到了同样的错误。不是将工作目录链接到“/android/assets/”,而是将其链接到“/core/assets”,这对我来说效果很好。
【讨论】:
【参考方案8】:我没有 Android 项目。我的解决方案是将资产文件夹添加到 Java Build Path->Libraries 作为类文件夹。另外检查 Java Build Path->Order and Export 中的资产文件夹以将其包含在其他项目中。
【讨论】:
【参考方案9】:您可以检查资产在工作目录或链接资源中的路径。完成后检查您正在加载的文件。最后清理并刷新项目并享受。
【讨论】:
以上是关于运行新的 LibGDX 项目时“找不到文件”的主要内容,如果未能解决你的问题,请参考以下文章