"Fichier non trouvé" lors de l'exécution d'un nouveau projet LibGDX


115

J'essaye d'apprendre LibGDX, j'installe tous les logiciels listés ici avec un nouvel Eclipse 4.3 sur un Mac OS X Maverick fraîchement formaté.

Tout se passe bien, après un redémarrage, je télécharge et exécute le gdx-setup.jar, remplis le formulaire et l'importe dans Eclipse.

Aucune erreur, aucun avertissement, lorsque j'essaye d'exécuter le bureau. (Cliquez avec le bouton droit sur le projet de bureau, Exécuter en tant que -> Application Java).

J'ai cette erreur

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)

J'ai trouvé beaucoup de problèmes similaires ici, je les essaie tous sans aucun bon résultat ... Hier soir, j'ai trouvé cela , très cool, j'ai le dernier Java 1.8, un mac et Eclipse s'adaptent parfaitement ...

Mais pas de succès, j'essaye avec Java 1.6 et 1.7, toujours la même erreur (aucun fichier trouvé, j'ai gardé Java 1.7)

Je commence à faire du débogage, ici ma seule modification du code d'origine généré par l'importation.

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 chose étrange est que pathLocal est égal à "". Est-il normal que Gdx.files.getLocalStoragePath () ne renvoie rien (chaîne vide)?

Également

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

Fonctionne très bien. seul le local donne l'erreur, isLocal également et isExternal renvoie true.

Et comme je l' ai essayé un bon nombre de combinaisons, /assets/data/badlogic.jpg, /assets/badlogic.jpg, /data/badlogic.jpg, data/badlogic.jpg, et badlogic.jpg.

L'image badlogic.jpg est là et je l'ai mise à plusieurs endroits pour être sûr.

Et maintenant, la raison pour laquelle je suis ici pour obtenir de l'aide est que j'essaie simplement la même étape sur un PC et tout fonctionne très bien.

Quel est le problème avec mon nouveau mac et son paramétrage?


C'est bizarre ... avez-vous actualisé le projet Android dans Eclipse après avoir ajouté les actifs? Parce que cela m'arrive souvent lorsque j'ajoute un nouvel actif au dossier d'actifs dans le projet Android et que j'oublie d'actualiser le projet Android dans Eclipse, cela me donnera une erreur disant que l'image n'est pas là ...
florianbaethge

Réponses:


230

Depuis le wiki de libgdx

Lorsque vous exécutez Desktop Project

L'application échouera la première fois. Ouvrez la configuration d'exécution que vous venez de créer et définissez le répertoire de travail sur le répertoire android / assets /!

liez votre projet de bureau au dossier des ressources Android?

Allez dans Exécuter => Exécuter les configurations .. => choisissez DesktopLauncher , Onglet Arguments => Répertoire de travail => Autres puis accédez à yourproject-android / assets / et cliquez sur Appliquer => Exécuter

entrez la description de l'image ici


également pour aider les autres avec le même problème, pour que le même répertoire fonctionne avec la version Android, nous devons faire un clic droit sur le répertoire Android / assets et cliquer sur le chemin construit et choisir de l'ajouter.
lebill

10
Cela l'a fait pour moi aussi. Quel dommage que LibGDX ait ce problème dès le début - c'est un excellent système, mais des choses comme celle-là vont effrayer les développeurs avec peu de patience.
Richard

Impressionnant! Ne serait-il pas plus logique que libgdx remplace l'image par un champ de texte dans l'exemple de projet expliquant comment faire cela? Je suppose qu'une simple recherche sur Google conduit tout le monde ici de toute façon, mais néanmoins, c'est une chose étrange à rencontrer
Kai Qing

1
Si vous n'avez pas de dossier android / assets, définir le dossier desktop / assets de la même manière a fonctionné pour moi.
Fredrik Andersson

1
Veuillez noter que ce n'est pas une solution mais une solution de contournement. Cela fonctionnera dans la plupart des circonstances, mais pas dans toutes. Par exemple, si vous prévoyez de générer un atlas de textures à partir du module Desktop, vous devrez recalculer les chemins, qui par défaut sont relatifs au module Desktop.
Fran Marzoa

75

Pour ceux d'entre nous qui utilisent Android Studio ou IntelliJ IDEA, vous devez suivre ces étapes:

  1. Sélectionnez Exécuter -> Modifier les configurations dans le menu

  2. Dans la zone de texte «Répertoire de travail:», ajoutez «/ android / assets» au chemin.

Notez que si vous exécutez des tâches avec gradle, ce n'est pas un problème. Les fichiers gradle.build sont configurés pour utiliser le dossier assets du module android.


13

Notez que les réponses précédentes ne fonctionneront pas pour les utilisateurs qui ont décoché la case "Android" lors de la configuration. Il devrait vraiment y avoir un dossier d'actifs par défaut installé pour ceux qui ne se soucient pas du déploiement pour Android.


5
Correct et correct, je suis tombé dessus; définir le répertoire de travail du bureau dans le dossier des actifs dans le noyau a fonctionné pour moi.
naftalimich

@naftalimich Ouais, je pense que les actifs devraient vraiment être au cœur. Je comprends pourquoi ils l'ont fait, car le plugin android gradle les veut là-bas et ils ne voulaient pas s'occuper de tout copier à chaque construction / traiter des problèmes de synchronisation. Mais cela devrait vraiment être abordé.
EntangledLoops

11

Pour ceux qui utilisent Intellij IDEA:

  1. Exécuter -> Modifier les configurations
  2. Sur le côté gauche, choisissez: Application -> DesktopLauncher
  3. Dans l'onglet "Configuration", sous "Répertoire de travail", choisissez votre chemin android / assets

3
Vous pouvez mentionner: 1) Cela vous oblige à créer d'abord une configuration de bureau. 2) Cela suppose que vous avez sélectionné Android lors de la génération de votre projet d'origine. 3) Cette réponse a déjà été fournie par Code-Apprentice ci-dessus en tant qu'instructions pour Android Studio, qui est basé sur IntelliJ IDE.
EntangledLoops

6

C'est ainsi que vous le corrigez correctement sans jouer avec le répertoire de travail:

Le problème est que le dossier de ressources n'est pas correctement marqué comme resourcesrépertoire pour la génération gradle. Pour résoudre ce problème, vous devez ajouter la ligne suivante dans le ./core/build.gradlefichier de construction:

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

Mon fichier après une nouvelle configuration avec la version récente de libGDX ressemble à ceci:

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

J'utilise une solution différente.

Au lieu de créer une configuration d'exécution d'application, créez une configuration de build Gradle. La tâche estdesktop:run . Une fois qu'il est exécuté, le jeu (devrait) se lancer et rester en vie sans planter, et les ressources devraient être trouvées.

Je ne sais pas exactement pourquoi, mais lorsqu'une tâche Gradle est exécutée ainsi, les ressources sont trouvées. Lorsqu'une configuration d'exécution d'application est utilisée (sans modifications comme la réponse actuellement acceptée), elle se bloque car elle ne trouve pas les ressources.


0

Je n'ai pas de projet Android. Ma solution consiste à ajouter le dossier d'actif au chemin de construction Java-> Bibliothèques en tant que dossier de classe. Vérifiez également le dossier des ressources dans Chemin de construction Java-> Trier et exporter pour l'inclure dans d'autres projets.


0

Vous pouvez vérifier le chemin des actifs dans le répertoire de travail ou les ressources liées. Après avoir terminé, vérifiez le fichier que vous chargez. Enfin, nettoyez et actualisez le projet et profitez-en.


0

J'ai eu le même problème dans IntelliJ, et je n'avais pas généré le projet libgdx pour Android (l'option Android n'était pas marquée comme cochée) et j'obtenais encore la même erreur. Au lieu de lier le répertoire de travail à "/ android / assets /", liez-le à " / core / assets " et cela a bien fonctionné pour moi.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.