"Datei nicht gefunden" beim Ausführen eines neuen LibGDX-Projekts

115

Beim Versuch, LibGDX zu lernen, installiere ich die gesamte hier aufgeführte Software mit einem neuen Eclipse 4.3 auf einem frisch formatierten Mac OS X Maverick.

Alles läuft reibungslos, nach einem Neustart lade ich die Datei gdx-setup.jar herunter und führe sie aus, fülle das Formular aus und importiere sie in Eclipse.

Kein Fehler, keine Warnung, wenn ich versuche, den Desktop auszuführen. (Klicken Sie mit der rechten Maustaste auf das Desktop-Projekt, Ausführen als -> Java-Anwendung).

Ich habe diesen Fehler bekommen

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)

Ich habe hier eine Menge ähnlicher Probleme gefunden, ich probiere sie alle ohne gutes Ergebnis aus ... Letzte Nacht fand ich das sehr cool. Ich habe das neueste Java 1.8, einen Mac und Eclipse, die perfekt passen ...

Aber kein Erfolg, ich versuche es mit Java 1.6 und 1.7, immer der gleiche Fehler (Keine Datei gefunden, ich habe Java 1.7 behalten)

Ich beginne ein Debugging, hier meine einzige Änderung des ursprünglichen Codes, der durch den Import generiert wurde.

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();
    }
}

Das Seltsame ist, dass pathLocal gleich "" ist. Ist es normal, dass Gdx.files.getLocalStoragePath () nichts zurückgibt (leere Zeichenfolge)?

Auch der

imgExternal = new Texture(Gdx.files.external("/Desktop/badlogic.jpg"));

Funktioniert super. Nur der lokale gibt den Fehler aus, auch isLocal und isExternal geben true zurück.

Und ich versuche , eine Menge Kombinationen, wie /assets/data/badlogic.jpg, /assets/badlogic.jpg, /data/badlogic.jpg, data/badlogic.jpg, und badlogic.jpg.

Das Bild badlogic.jpg ist da und ich habe es an mehreren Stellen platziert, um sicherzugehen.

Und jetzt bin ich hier, um Hilfe zu bekommen, weil ich einfach den gleichen Schritt auf einem PC versuche und alles großartig funktioniert.

Was ist los mit meinem neuen Mac und seiner Einstellung?

lebill
quelle
Das ist komisch ... hast du das Android-Projekt in Eclipse aktualisiert, nachdem du die Assets hinzugefügt hast? Da mir das häufig passiert, wenn ich dem Asset-Ordner im Android-Projekt ein neues Asset hinzufüge und dann vergesse, das Android-Projekt in Eclipse zu aktualisieren, wird mir eine Fehlermeldung angezeigt, dass das Bild nicht vorhanden ist ...
Florianbaethge

Antworten:

230

Aus dem libgdx-Wiki

Wenn Sie Desktop Project ausführen

Die Anwendung schlägt beim ersten Mal fehl. Öffnen Sie die soeben erstellte Run Configuration und setzen Sie das Arbeitsverzeichnis auf das Verzeichnis android / assets /!

Ihr Desktop-Projekt mit dem Android-Assets-Ordner verknüpfen?

Gehen Sie zu Ausführen => Konfigurationen ausführen .. => Wählen Sie DesktopLauncher , Registerkarte Argumente => Arbeitsverzeichnis => Andere, navigieren Sie dann zu Ihrem Projekt-Android / Assets / und klicken Sie auf Übernehmen => Ausführen

Geben Sie hier die Bildbeschreibung ein

Phonbopit
quelle
Um anderen bei demselben Problem zu helfen und dasselbe Verzeichnis mit dem Android-Build funktionieren zu lassen, müssen wir mit der rechten Maustaste auf das Verzeichnis Android / Assets klicken und auf Erstellter Pfad klicken und es hinzufügen.
lebill
10
Das hat es auch für mich getan. Was für eine Schande, dass LibGDX dieses Problem von Anfang an hat - es ist ein großartiges System, aber solche Dinge werden Entwickler mit wenig Geduld abschrecken.
Richard
Genial! Wäre es für libgdx nicht sinnvoller, das Bild durch ein Textfeld für das Beispielprojekt zu ersetzen, in dem dies erklärt wird? Ich denke, eine einfache Google-Suche führt jeden hierher, aber es ist trotzdem eine seltsame Sache
Kai Qing
1
Falls Sie keinen Android / Assets-Ordner haben, hat es für mich genauso funktioniert, den Desktop / Assets-Ordner so einzustellen.
Fredrik Andersson
1
Bitte beachten Sie, dass dies keine Lösung, sondern eine Problemumgehung ist. Es wird in den meisten Fällen funktionieren, aber nicht in allen. Wenn Sie beispielsweise einen Texturatlas aus dem Desktop-Modul generieren möchten, müssen Sie die Pfade neu berechnen, die standardmäßig relativ zum Desktop-Modul sind.
Fran Marzoa
75

Für diejenigen von uns, die Android Studio oder IntelliJ IDEA verwenden, müssen Sie die folgenden Schritte ausführen:

  1. Wählen Sie im Menü Ausführen -> Konfigurationen bearbeiten

  2. Fügen Sie im Textfeld "Arbeitsverzeichnis:" "/ android / assets" an den Pfad an.

Beachten Sie, dass dies kein Problem darstellt, wenn Sie Aufgaben mit gradle ausführen. Die gradle.build-Dateien sind so konfiguriert, dass sie den Assets-Ordner des Android-Moduls verwenden.

Code-Lehrling
quelle
13

Beachten Sie, dass die vorherigen Antworten nicht für Benutzer funktionieren, die das Kontrollkästchen "Android" beim Setup deaktiviert haben. Es sollte wirklich ein Standard-Assets-Ordner für diejenigen installiert sein, die sich nicht für die Bereitstellung für Android interessieren.

EntangledLoops
quelle
5
Richtig und richtig, bin einfach darauf gestoßen; Das Einstellen des Desktop-Arbeitsverzeichnisses auf den Assets-Ordner im Core hat bei mir funktioniert.
Naftalimich
@naftalimich Ja, ich denke, Vermögenswerte sollten wirklich im Kern sein. Ich verstehe, warum sie es getan haben, da das Android Gradle Plugin sie dort haben will und sie nicht damit umgehen wollten, alles zu kopieren, was mit jedem Build / Synchronisierungsproblemen zu tun hat. Aber das sollte wirklich angegangen werden.
EntangledLoops
11

Für diejenigen, die Intellij IDEA verwenden:

  1. Ausführen -> Konfigurationen bearbeiten
  2. Wählen Sie auf der linken Seite: Anwendung -> DesktopLauncher
  3. Wählen Sie in der Registerkarte "Konfiguration" unter "Arbeitsverzeichnis" Ihren Android- / Assets-Pfad aus
Sku Sku
quelle
3
Sie könnten Folgendes erwähnen: 1) Dazu müssen Sie zuerst eine Desktop-Konfiguration erstellen. 2) Dies setzt voraus, dass Sie Android ausgewählt haben, als Sie Ihr ursprüngliches Projekt generiert haben. 3) Diese Antwort wurde bereits von Code-Apprentice oben als Anleitung für Android Studio bereitgestellt, das auf der IntelliJ IDE basiert.
EntangledLoops
6

So beheben Sie es richtig, ohne mit dem Arbeitsverzeichnis herumzuspielen:

Das Problem ist, dass der Asset-Ordner nicht korrekt als resourcesVerzeichnis für den Gradle-Build markiert ist . Um dies zu beheben, müssen Sie der ./core/build.gradleBuild-Datei die folgende Zeile hinzufügen :

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

Meine Datei nach einem sauberen Setup mit der aktuellen libGDX-Version sieht folgendermaßen aus:

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"
}
entfesselte
quelle
1

Ich benutze eine andere Lösung.

Erstellen Sie anstelle einer Anwendungslaufkonfiguration eine Gradle-Buildkonfiguration. Die Aufgabe ist desktop:run. Sobald es ausgeführt wird, sollte das Spiel gestartet werden und am Leben bleiben, ohne abzustürzen, und die Ressourcen sollten gefunden werden.

Ich bin mir nicht ganz sicher, warum, aber wenn eine Gradle-Aufgabe wie diese ausgeführt wird, werden die Ressourcen gefunden. Wenn eine Anwendungslaufkonfiguration verwendet wird (ohne Änderungen wie die aktuell akzeptierte Antwort), stürzt sie ab, weil die Ressourcen nicht gefunden werden können.

Zoe
quelle
0

Ich habe kein Android-Projekt. Meine Lösung besteht darin, den Asset-Ordner als Klassenordner zum Java Build Path-> Libraries hinzuzufügen. Überprüfen Sie außerdem den Asset-Ordner unter Java Build Path-> Order and Export, um ihn in andere Projekte aufzunehmen.

Juanjo
quelle
0

Sie können den Pfad der Assets im Arbeitsverzeichnis oder in verknüpften Ressourcen überprüfen. Überprüfen Sie anschließend die Datei, die Sie laden. Bereinigen und aktualisieren Sie das Projekt zuletzt und genießen Sie es.

Amit Kumar Shrivastava
quelle
0

Ich hatte das gleiche Problem in IntelliJ und das libgdx-Projekt für Android nicht generiert (die Android-Option wurde nicht als aktiviert markiert), und es wurde immer noch der gleiche Fehler angezeigt. Anstatt das Arbeitsverzeichnis mit "/ android / assets /" zu verknüpfen, verknüpfte es mit " / core / assets " und es funktionierte gut für mich.

Salek
quelle