"File non trovato" durante l'esecuzione di un nuovo progetto LibGDX


115

Sto cercando di imparare LibGDX, installo tutto il software qui elencato con un nuovo Eclipse 4.3 su un Mac OS X Maverick appena formattato.

Tutto procede senza intoppi, dopo un riavvio, scarico ed eseguo gdx-setup.jar, compilo il modulo e importa in Eclipse.

Nessun errore, nessun avviso, quando provo a eseguire il desktop. (Fare clic con il pulsante destro del mouse sul progetto desktop, Esegui come -> Applicazione Java).

Ho ricevuto questo errore

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)

Ho trovato molti problemi simili qui, li provo tutti senza alcun buon risultato ... La scorsa notte ho trovato questo , molto bello ho l'ultimo Java 1.8, un mac ed Eclipse si adattano perfettamente ...

Ma senza successo, provo con Java 1.6 e 1.7, sempre lo stesso errore (Nessun file trovato, ho mantenuto Java 1.7)

Comincio a fare qualche debug, qui la mia unica modifica del codice originale generato dall'importazione.

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

La cosa strana è che pathLocal è uguale a "". È normale che Gdx.files.getLocalStoragePath () non restituisca nulla (stringa vuota)?

Anche il

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

Funziona alla grande. solo quello locale restituisce l'errore, anche isLocal e isExternal restituisce true.

E provo un sacco di combinazioni, come /assets/data/badlogic.jpg, /assets/badlogic.jpg, /data/badlogic.jpg, data/badlogic.jpg, e badlogic.jpg.

L'immagine badlogic.jpg è lì e l'ho messa in più posti per essere sicuro.

E ora il motivo per cui sono qui per chiedere aiuto è che provo lo stesso passaggio su un PC e tutto funziona alla grande.

Cosa c'è di sbagliato nel mio nuovo Mac e nelle sue impostazioni?


È strano ... hai aggiornato il progetto Android in Eclipse dopo aver aggiunto le risorse? Poiché questo mi succede spesso quando aggiungo una nuova risorsa alla cartella delle risorse nel progetto Android e poi dimentico di aggiornare il progetto Android in Eclipse, mi darà un errore dicendo che l'immagine non è lì ...
florianbaethge

Risposte:


230

Dal wiki di libgdx

Quando esegui Desktop Project

L'applicazione fallirà la prima volta. Apri la configurazione di esecuzione che hai appena creato e imposta la directory di lavoro su android / assets / directory!

collegare il progetto desktop alla cartella delle risorse Android?

Vai a Esegui => Esegui configurazioni .. => scegli DesktopLauncher , scheda Argomenti => Directory di lavoro => Altri quindi vai a yourproject-android / assets / e fai clic su Applica => Esegui

inserisci qui la descrizione dell'immagine


anche per aiutare gli altri con lo stesso problema, per far funzionare la stessa directory con la build Android, dobbiamo fare clic con il tasto destro sulla directory Android / assets e fare clic su Built path e scegliere di aggiungerla.
lebill

10
Lo ha fatto anche per me. Peccato che LibGDX abbia questo problema fin dall'inizio: è un ottimo sistema, ma cose del genere spaventeranno gli sviluppatori con poca pazienza.
Richard

Eccezionale! Non avrebbe più senso che libgdx sostituisse l'immagine con un campo di testo al progetto di esempio che spiega di farlo? Immagino che una semplice ricerca su Google porti tutti qui comunque, ma non di meno, è una cosa strana da incontrare
Kai Qing

1
Nel caso in cui non si disponga della cartella Android / assets, l'impostazione della cartella desktop / assets allo stesso modo ha funzionato per me.
Fredrik Andersson

1
Tieni presente che questa non è una soluzione, ma una soluzione alternativa. Funzionerà nella maggior parte delle circostanze, ma non in tutte. Ad esempio, se prevedi di generare un atlante delle texture dal modulo Desktop dovrai ricalcolare i percorsi, che per impostazione predefinita sono relativi al modulo Desktop.
Fran Marzoa

75

Per quelli di noi che utilizzano Android Studio o IntelliJ IDEA, è necessario seguire questi passaggi:

  1. Seleziona Esegui -> Modifica configurazioni dal menu

  2. Nella casella di testo "Directory di lavoro:", aggiungi "/ android / assets" al percorso.

Nota che se esegui attività con gradle, questo non è un problema. I file gradle.build sono configurati per utilizzare la cartella degli asset dal modulo Android.


13

Tieni presente che le risposte precedenti non funzioneranno per gli utenti che hanno deselezionato la casella "Android" durante la configurazione. Dovrebbe esserci davvero una cartella delle risorse predefinita installata per coloro che non si preoccupano della distribuzione per Android.


5
Corretto e corretto, ci siamo appena imbattuti; l'impostazione della directory di lavoro del desktop nella cartella delle risorse nel core ha funzionato per me.
naftalimich

@naftalimich Sì, penso che le risorse dovrebbero davvero essere fondamentali. Capisco perché l'hanno fatto, poiché il plug-in gradle di Android li vuole lì e non volevano occuparsi della copia di tutto ciò che ogni build / gestire i problemi di sincronizzazione. Ma questo dovrebbe davvero essere affrontato.
EntangledLoops

11

Per coloro che utilizzano Intellij IDEA:

  1. Esegui -> Modifica configurazioni
  2. Sul lato sinistro scegli: Applicazione -> DesktopLauncher
  3. Nella scheda "Configurazione", sotto "Directory di lavoro" scegli il tuo percorso android / assets

3
Potresti menzionare: 1) Ciò richiede prima di creare una configurazione desktop. 2) Ciò presuppone che tu abbia selezionato Android durante la generazione del progetto originale. 3) Questa risposta è stata già fornita da Code-Apprentice sopra come istruzioni per Android Studio, che è costruito sull'IDE di IntelliJ.
EntangledLoops

6

Ecco come risolverlo correttamente senza giocare con la directory di lavoro:

Il problema è che la cartella degli asset non è contrassegnata correttamente come resourcesdirectory per la build gradle. Per risolvere questo problema devi aggiungere la seguente riga nel ./core/build.gradlefile di build:

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

Il mio file dopo un'installazione pulita con la recente versione di libGDX appare così:

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

Uso una soluzione diversa.

Invece di creare una configurazione di esecuzione dell'applicazione, creare una configurazione di build Gradle. Il compito è desktop:run. Una volta eseguito, il gioco (dovrebbe) avviarsi e rimanere in vita senza bloccarsi e le risorse dovrebbero essere trovate.

Non sono esattamente sicuro del perché, ma quando un'attività Gradle viene eseguita in questo modo, le risorse vengono trovate. Quando viene utilizzata una configurazione di esecuzione dell'applicazione (senza modifiche come la risposta attualmente accettata) si arresta in modo anomalo perché non riesce a trovare le risorse.


0

Non ho un progetto Android. La mia soluzione è aggiungere la cartella degli asset a Java Build Path-> Libraries come Class Folder. Controlla inoltre la cartella delle risorse in Percorso build Java-> Ordina ed esporta per includerla in altri progetti.


0

È possibile controllare il percorso delle risorse nella directory di lavoro o nelle risorse collegate. Dopo aver fatto controllare il file che si sta caricando. Infine pulire e aggiornare il progetto e divertirsi.


0

Ho avuto lo stesso problema in IntelliJ e non avevo generato il progetto libgdx per Android (l'opzione Android non era contrassegnata come selezionata) e stavo ancora ricevendo lo stesso errore. Invece di collegare la directory di lavoro a "/ android / assets /", collegalo a " / core / assets " e per me ha funzionato bene.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.