„Nie znaleziono pliku” podczas uruchamiania nowego projektu LibGDX

115

Próbuję się nauczyć LibGDX, instaluję wszystkie wymienione tutaj programy z nowym Eclipse 4.3 na świeżo sformatowanym Mac OS X Maverick.

Wszystko idzie gładko, po ponownym uruchomieniu pobieram i uruchamiam plik gdx-setup.jar, wypełniam formularz i importuję do Eclipse.

Żadnego błędu, żadnego ostrzeżenia, gdy próbuję uruchomić pulpit. (Kliknij prawym przyciskiem myszy projekt pulpitu, Uruchom jako -> Aplikacja Java).

Mam ten błąd

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)

Znalazłem tutaj wiele podobnych problemów, próbuję je wszystkie bez dobrego wyniku ... Znalazłem to ostatniej nocy , bardzo fajnie, mam najnowszą Javę 1.8, mac, a Eclipse pasuje idealnie ...

Ale bez sukcesu, próbuję z Javą 1.6 i 1.7, Zawsze ten sam błąd (Nie znaleziono pliku, Zachowałem Javę 1.7)

Zaczynam trochę debugować, tutaj moja jedyna modyfikacja oryginalnego kodu wygenerowanego przez import.

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

Dziwne jest to, że pathLocal jest równe „”. Czy to normalne, że Gdx.files.getLocalStoragePath () nic nie zwraca (pusty ciąg)?

Również

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

Działa świetnie. tylko lokalna wartość daje błąd, również isLocal i isExternal zwraca true.

I spróbuj wiele kombinacji, jak /assets/data/badlogic.jpg, /assets/badlogic.jpg, /data/badlogic.jpg, data/badlogic.jpg, i badlogic.jpg.

Obraz badlogic.jpg jest tam i dla pewności umieściłem go w wielu miejscach.

A teraz powodem, dla którego jestem tu po pomoc, jest to, że po prostu próbuję tego samego kroku na komputerze PC i wszystko działa świetnie.

Co jest nie tak z moim nowym komputerem Mac i jego ustawieniem?

lebill
źródło
To dziwne ... czy odświeżyłeś projekt Androida w Eclipse po dodaniu zasobów? Ponieważ zdarza mi się to często, gdy dodam nowy zasób do folderu zasobów w projekcie androida, a potem zapomnę o odświeżeniu projektu Androida w Eclipse, pojawi się błąd z informacją, że nie ma obrazu ...
florianbaethge

Odpowiedzi:

230

Z wiki libgdx

Po uruchomieniu programu Desktop Project

Aplikacja nie powiedzie się za pierwszym razem. Otwórz właśnie utworzoną konfigurację uruchamiania i ustaw katalog roboczy na katalog android / asset /!

połączyć projekt na komputer z folderem zasobów Androida?

Idź do Run => Run Configurations .. => wybierz DesktopLauncher , Arguments Tab => Working Directory => Others, a następnie przejdź do yourproject-android / asset / i kliknij Zastosuj => Uruchom

wprowadź opis obrazu tutaj

Phonbopit
źródło
również, aby pomóc innym w tym samym problemie, aby ten sam katalog działał z wersją Androida, musimy kliknąć prawym przyciskiem myszy katalog Android / asset i kliknąć opcję Built path i wybrać opcję Add it.
lebill
10
To też zrobiło to dla mnie. Szkoda, że ​​LibGDX ma ten problem od samego początku - to świetny system, ale takie rzeczy odstraszy deweloperów niewielką cierpliwością.
Richard
Niesamowite! Czy nie byłoby bardziej sensowne, gdyby libgdx zastąpił obraz polem tekstowym w przykładowym projekcie wyjaśniającym, jak to zrobić? Wydaje mi się, że proste wyszukiwanie w Google i tak prowadzi tutaj wszystkich, ale nie mniej jednak, jest to dziwna rzecz
Kai Qing
1
Jeśli nie masz folderu android / asset, ustawienie folderu desktop / asset w ten sam sposób zadziałało.
Fredrik Andersson
1
Należy pamiętać, że nie jest to rozwiązanie, ale obejście. Będzie działać w większości przypadków, ale nie we wszystkich. Na przykład, jeśli planujesz wygenerować atlas tekstur z modułu Desktop, będziesz musiał ponownie obliczyć ścieżki, które domyślnie są względem modułu Desktop.
Fran Marzoa
75

Dla tych z nas, którzy używają Android Studio lub IntelliJ IDEA, musisz wykonać następujące kroki:

  1. Wybierz z menu Uruchom -> Edytuj konfiguracje

  2. W polu tekstowym „Katalog roboczy:” dodaj „/ android / asset” do ścieżki.

Pamiętaj, że jeśli wykonujesz zadania za pomocą gradle, nie stanowi to problemu. Pliki gradle.build są skonfigurowane do korzystania z folderu zasobów z modułu Android.

Code-Apprentice
źródło
13

Pamiętaj, że poprzednie odpowiedzi nie będą działać w przypadku użytkowników, którzy odznaczyli pole „Android” podczas konfiguracji. Naprawdę powinien być zainstalowany domyślny folder zasobów dla tych, którzy nie dbają o wdrażanie na Androida.

EntangledLoops
źródło
5
Poprawne i poprawne, po prostu wpadłem na to; ustawienie katalogu roboczego Desktop na folder zasobów w rdzeniu zadziałało dla mnie.
naftalimich
@naftalimich Tak, myślę, że aktywa powinny być naprawdę w rdzeniu. Rozumiem, dlaczego to zrobili, ponieważ wtyczka Android Gradle chce ich tam, a oni nie chcieli zajmować się kopiowaniem wszystkiego w każdej kompilacji / radzeniu sobie z problemami z synchronizacją. Ale naprawdę należy się tym zająć.
EntangledLoops
11

Dla osób używających Intellij IDEA:

  1. Uruchom -> Edytuj konfiguracje
  2. Po lewej stronie wybierz: Aplikacja -> DesktopLauncher
  3. Na karcie „Konfiguracja” wybierz „Katalog roboczy” i wybierz ścieżkę do Androida / zasobów
Sku Sku
źródło
3
Możesz wspomnieć: 1) Wymaga to najpierw utworzenia konfiguracji pulpitu. 2) Zakłada się, że wybrałeś Androida podczas generowania oryginalnego projektu. 3) Ta odpowiedź została już dostarczona przez Code-Apprentice powyżej jako instrukcje dla Android Studio, które jest zbudowane na IntelliJ IDE.
EntangledLoops
6

Oto jak to naprawić poprawnie, nie bawiąc się katalogiem roboczym:

Problem polega na tym, że folder zasobów nie jest poprawnie oznaczony jako resourceskatalog dla kompilacji gradle. Aby to naprawić, musisz dodać następujący wiersz w ./core/build.gradlepliku kompilacji:

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

Mój plik po czystej instalacji z najnowszą wersją libGDX wygląda następująco:

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"
}
Unchained
źródło
1

Używam innego rozwiązania.

Zamiast tworzyć konfigurację uruchamiania aplikacji, utwórz konfigurację kompilacji Gradle. Zadanie jestdesktop:run . Po wykonaniu gra (powinna) uruchomić się i pozostać przy życiu bez awarii, a zasoby powinny zostać znalezione.

Nie jestem dokładnie pewien dlaczego, ale gdy zadanie Gradle jest uruchamiane w ten sposób, zasoby są znalezione. Gdy używana jest konfiguracja uruchamiania aplikacji (bez modyfikacji, takich jak aktualnie zaakceptowana odpowiedź), ulega awarii, ponieważ nie może znaleźć zasobów.

Zoe
źródło
0

Nie mam projektu na Androida. Moim rozwiązaniem jest dodanie folderu zasobów do ścieżki budowania Java-> Biblioteki jako folderu klas. Dodatkowo sprawdź folder zasobów w ścieżce budowania Java-> Zamów i eksportuj, aby uwzględnić go w innych projektach.

Juanjo
źródło
0

Możesz sprawdzić ścieżkę zasobów w katalogu roboczym lub połączonych zasobach. Po zakończeniu sprawdź, czy plik, który ładujesz. Na koniec wyczyść i odśwież projekt i ciesz się.

Amit Kumar Shrivastava
źródło
0

Miałem ten sam problem w IntelliJ i nie wygenerowałem projektu libgdx dla Androida (opcja Android nie została zaznaczona jako zaznaczona) i nadal otrzymywałem ten sam błąd. Zamiast łączyć katalog roboczy z „/ android / asset /”, połączyłem go z „ / core / asset ” i działało dobrze.

Salek
źródło