“ ไม่พบไฟล์” เมื่อเรียกใช้โปรเจ็กต์ LibGDX ใหม่


115

ฉันพยายามเรียนรู้ LibGDX ฉันติดตั้งซอฟต์แวร์ทั้งหมดที่ระบุไว้ที่นี่ด้วย Eclipse 4.3 ใหม่บน mac OS X Maverick ที่ฟอร์แมตใหม่

ทุกอย่างเป็นไปอย่างราบรื่นหลังจากรีบูตฉันดาวน์โหลดและเรียกใช้งาน 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)

ฉันพบปัญหาที่คล้ายกันมากมายที่นี่ฉันลองทั้งหมดโดยไม่ได้ผลใด ๆ ... เมื่อคืนฉันพบสิ่งนี้เจ๋งมากฉันมี Java 1.8 ล่าสุด, mac และ Eclipse เข้ากันได้อย่างสมบูรณ์แบบ ...

แต่ไม่ประสบความสำเร็จฉันลองด้วย Java 1.6 และ 1.7 ข้อผิดพลาดเดียวกันเสมอ (ไม่พบไฟล์ฉันเก็บ Java 1.7)

ฉันเริ่มทำการแก้ไขข้อบกพร่องบางอย่างที่นี่เป็นการแก้ไขโค้ดดั้งเดิมที่สร้างขึ้นโดยการนำเข้าเท่านั้น

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"));

ใช้งานได้ดี เฉพาะ local เท่านั้นที่ให้ข้อผิดพลาดนอกจากนี้ isLocal และ isExternal return true

และฉันพยายามจำนวนมากของการรวมกันเช่น/assets/data/badlogic.jpg, /assets/badlogic.jpg, /data/badlogic.jpg, และdata/badlogic.jpgbadlogic.jpg

ภาพ badlogic.jpg อยู่ที่นั่นและฉันวางไว้หลายที่เพื่อความแน่ใจ

และตอนนี้เหตุผลที่ฉันมาที่นี่เพื่อขอความช่วยเหลือคือฉันแค่ลองทำตามขั้นตอนเดียวกันทั้งหมดบนพีซีและทุกอย่างก็ใช้งานได้ดี

เกิดอะไรขึ้นกับ Mac เครื่องใหม่ของฉันและการตั้งค่านี้


มันแปลก ... คุณรีเฟรชโปรเจ็กต์ android ใน Eclipse หลังจากเพิ่มเนื้อหาหรือไม่? เนื่องจากสิ่งนี้เกิดขึ้นกับฉันมากมายเมื่อฉันเพิ่มเนื้อหาใหม่ลงในโฟลเดอร์สินทรัพย์ใน android-project แล้วลืมรีเฟรชโครงการ android ใน Eclipse มันจะทำให้ฉันมีข้อผิดพลาดว่าไม่มีภาพ ...
florianbaethge

คำตอบ:


230

จาก libgdx wiki

เมื่อคุณเรียกใช้โครงการเดสก์ท็อป

การสมัครจะล้มเหลวในครั้งแรก เปิดรันคอนฟิกูเรชันที่คุณเพิ่งสร้างและตั้งค่าไดเร็กทอรีการทำงานเป็นไดเร็กทอรี android / assets /!

เชื่อมโยงโครงการเดสก์ท็อปของคุณไปยังโฟลเดอร์สินทรัพย์ของ Android

ไปที่Run => Run Configurations .. => เลือกDesktopLauncher , Arguments Tab => Working Directory => Others จากนั้นเรียกดู yourproject-android / assets / แล้วคลิกApply => Run

ใส่คำอธิบายภาพที่นี่


นอกจากนี้เพื่อช่วยคนอื่น ๆ ที่มีปัญหาเดียวกันเพื่อให้ไดเร็กทอรีเดียวกันทำงานร่วมกับ Android build เราต้องคลิกขวาที่ไดเร็กทอรี Android / assets และคลิกที่สร้างเส้นทางและเลือกเพิ่ม
lebill

10
ที่ทำเพื่อฉันด้วย สิ่งที่น่าเสียดายที่ LibGDX มีปัญหานี้ตั้งแต่เริ่มต้นมันเป็นระบบที่ยอดเยี่ยม แต่สิ่งต่างๆเช่นนี้จะทำให้ผู้พัฒนาตกใจไปด้วยความอดทนเพียงเล็กน้อย
Richard

! น่ากลัว มันจะสมเหตุสมผลกว่าไหมที่ libgdx จะแทนที่รูปภาพด้วยฟิลด์ข้อความไปยังโปรเจ็กต์ตัวอย่างที่อธิบายการทำสิ่งนี้ ฉันเดาว่าการค้นหาโดย Google ธรรมดา ๆ จะนำทุกคนมาที่นี่ แต่ไม่น้อยไปกว่านั้นมันเป็นเรื่องแปลกที่จะพบ
Kai Qing

1
ในกรณีที่คุณไม่มีโฟลเดอร์ android / assets การตั้งค่าโฟลเดอร์เดสก์ท็อป / สินทรัพย์ในลักษณะเดียวกับฉัน
Fredrik Andersson

1
โปรดทราบว่านี่ไม่ใช่วิธีแก้ปัญหา แต่เป็นวิธีแก้ปัญหาชั่วคราว มันจะทำงานในสถานการณ์ส่วนใหญ่ แต่ไม่ใช่ในทุกกรณี ตัวอย่างเช่นหากคุณวางแผนที่จะสร้างแผนที่พื้นผิวจากโมดูลเดสก์ท็อปคุณจะต้องคำนวณเส้นทางอีกครั้งซึ่งโดยค่าเริ่มต้นจะสัมพันธ์กับโมดูลเดสก์ท็อป
Fran Marzoa

75

สำหรับพวกเราที่ใช้ Android Studio หรือ IntelliJ IDEA คุณต้องทำตามขั้นตอนเหล่านี้:

  1. เลือก Run -> Edit Configurations จากเมนู

  2. ในกล่องข้อความ "Working Directory:" ต่อท้าย "/ android / assets" ไปยังเส้นทาง

โปรดทราบว่าหากคุณดำเนินการงานด้วย gradle นี่ไม่ใช่ปัญหา ไฟล์ gradle.build ได้รับการกำหนดค่าให้ใช้โฟลเดอร์ assets จากโมดูล Android


13

โปรดทราบว่าคำตอบก่อนหน้านี้จะใช้ไม่ได้กับผู้ใช้ที่ยกเลิกการเลือกช่อง "Android" ในการตั้งค่า ควรมีการติดตั้งโฟลเดอร์สินทรัพย์เริ่มต้นสำหรับผู้ที่ไม่สนใจเกี่ยวกับการปรับใช้สำหรับ Android


5
ถูกต้องและถูกต้องเพียงแค่วิ่งเข้าไป การตั้งค่าไดเร็กทอรีการทำงานของเดสก์ท็อปไปยังโฟลเดอร์สินทรัพย์ในแกนทำงานสำหรับฉัน
naftalimich

@naftalimich ใช่ฉันคิดว่าสินทรัพย์ควรเป็นหัวใจหลักจริงๆ ฉันเข้าใจว่าทำไมพวกเขาถึงทำเช่นนั้นเนื่องจากปลั๊กอิน android gradle ต้องการให้พวกเขาอยู่ที่นั่นและพวกเขาไม่ต้องการจัดการกับการคัดลอกทุกสิ่งที่สร้าง / จัดการกับปัญหาการซิงค์ แต่สิ่งนี้ควรได้รับการแก้ไขจริงๆ
EntangledLoops

11

สำหรับผู้ที่ใช้ Intellij IDEA:

  1. เรียกใช้ -> แก้ไขการกำหนดค่า
  2. ทางด้านซ้ายมือให้เลือก: Application -> DesktopLauncher
  3. ในแท็บ "Configuration" ให้เลือก "Working directory" เลือกเส้นทาง android / assets

3
คุณอาจพูดถึง: 1) สิ่งนี้คุณต้องสร้างการกำหนดค่าเดสก์ท็อปก่อน 2) สิ่งนี้จะถือว่าคุณเลือก Android เมื่อสร้างโครงการดั้งเดิมของคุณ 3) คำตอบนี้ได้ให้ไว้แล้วโดย Code-Apprentice ข้างต้นเป็นคำแนะนำสำหรับ Android Studio ซึ่งสร้างขึ้นจาก IntelliJ IDE
EntangledLoops

6

นี่คือวิธีที่คุณแก้ไขอย่างถูกต้องโดยไม่ต้องเล่นกับไดเร็กทอรีการทำงาน:

ปัญหาคือโฟลเดอร์ asset ไม่ถูกทำเครื่องหมายเป็นresourcesไดเร็กทอรีสำหรับ gradle build อย่างถูกต้อง ในการแก้ไขปัญหานี้คุณต้องเพิ่มบรรทัดต่อไปนี้ใน./core/build.gradleไฟล์ build:

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"
}

1

ฉันใช้วิธีแก้ปัญหาอื่น

แทนที่จะสร้างคอนฟิกูเรชันการรันแอ็พพลิเคชันให้สร้าง Gradle build configuration งานคือdesktop:run. เมื่อดำเนินการแล้วเกม (ควร) จะเปิดตัวและมีชีวิตอยู่โดยไม่หยุดทำงานและควรหาทรัพยากร

ฉันไม่แน่ใจว่าทำไม แต่เมื่องาน Gradle ถูกเรียกใช้เช่นนี้จะพบทรัพยากร เมื่อมีการใช้การกำหนดค่าการเรียกใช้แอปพลิเคชัน (โดยไม่มีการแก้ไขเช่นคำตอบที่ยอมรับในปัจจุบัน) จะขัดข้องเนื่องจากไม่พบทรัพยากร


0

ฉันไม่มีโครงการ Android วิธีแก้ปัญหาของฉันคือเพิ่มโฟลเดอร์ asset ไปยัง Java Build Path-> Libraries เป็น Class Folder ตรวจสอบโฟลเดอร์สินทรัพย์ใน Java Build Path-> Order and Export เพื่อรวมสิ่งนี้ในโปรเจ็กต์อื่น ๆ


0

คุณสามารถตรวจสอบเส้นทางของ Assets ในไดเรกทอรีการทำงานหรือทรัพยากรที่เชื่อมโยงหลังจากเสร็จสิ้นตรวจสอบไฟล์ที่คุณกำลังโหลดทำความสะอาดล่าสุดและรีเฟรชโครงการและเพลิดเพลิน


0

ฉันมีปัญหาเดียวกันใน IntelliJ และฉันไม่ได้สร้างโครงการ libgdx สำหรับ Android (ตัวเลือก Android ไม่ได้ถูกทำเครื่องหมายว่าเลือกไว้) และฉันยังได้รับข้อผิดพลาดเดียวกัน แทนที่จะเชื่อมโยงไดเรกทอรีการทำงานกับ "/ android / assets /" ให้เชื่อมโยงกับ " / core / assets " และมันก็ใช้ได้ดีสำหรับฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.