नया LibGDX प्रोजेक्ट चलाते समय "फ़ाइल नहीं मिली"


115

मैं LibGDX सीखने की कोशिश कर रहा हूं, मैं यहां सूचीबद्ध सभी सॉफ़्टवेयर स्थापित करता हूं नए ग्रहण 4.3 के साथ एक ताजा स्वरूपित मैक ओएस एक्स मावरिक पर ।

सब कुछ सुचारू हो जाता है, एक रिबूट के बाद, मैं डाउनलोड करता हूं, और gdx-setup.jar को निष्पादित करता हूं, फॉर्म भरता हूं, और ग्रहण में आयात करता हूं।

कोई त्रुटि नहीं, कोई चेतावनी नहीं, जब मैं डेस्कटॉप चलाने की कोशिश करता हूं। (डेस्कटॉप प्रोजेक्ट पर राइट क्लिक करें, रन अस -> जावा एप्लिकेशन)।

मुझे यह त्रुटि मिली

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)

मुझे यहां बहुत सारे समान मुद्दे मिले, मैं उन सभी को बिना किसी अच्छे परिणाम के आजमाता हूं ... कल रात मुझे यह पता चला , बहुत अच्छा मैं नवीनतम जावा 1.8, एक मैक, और ग्रहण पूरी तरह से फिट हूँ ...

लेकिन कोई सफलता नहीं, मैं जावा 1.6 और 1.7 के साथ कोशिश करता हूं, हमेशा एक ही त्रुटि (कोई फ़ाइल नहीं मिली, मैंने जावा 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();
    }
}

अजीब बात है पाथलोक "" के बराबर है। क्या Gdx.files.getLocalStoragePath () के लिए कुछ भी नहीं (खाली स्ट्रिंग) वापस करना सामान्य है?

यह भी

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

बहुत अच्छा काम करता है। केवल स्थानीय व्यक्ति ही त्रुटि देता है, और साथ ही, और बाह्य रिटर्न सही है।

और मैं संयोजन, जैसे की एक बहुत कोशिश /assets/data/badlogic.jpg, /assets/badlogic.jpg, /data/badlogic.jpg, data/badlogic.jpg, औरbadlogic.jpg

छवि badlogic.jpg है और मैंने इसे सुनिश्चित करने के लिए कई स्थानों पर रखा है।

और अब कारण है कि मैं मदद के लिए यहां हूं मैं सिर्फ एक ही कदम एक पीसी पर कोशिश करता हूं और सब कुछ बहुत अच्छा काम करता है।

मेरे नए मैक के साथ क्या गलत है और यह सेटिंग कर रहा है?


यह अजीब है ... क्या आपने संपत्ति जोड़ने के बाद ग्रहण में एंड्रॉइड-प्रोजेक्ट को ताज़ा किया था? क्योंकि यह मेरे लिए बहुत कुछ होता है जब मैं एंड्रॉइड-प्रोजेक्ट में एसेट-फोल्डर में एक नई संपत्ति जोड़ता हूं और फिर ग्रहण में एंड्रॉइड प्रोजेक्ट को रीफ्रेश करना भूल जाता हूं, यह मुझे एक त्रुटि देगा, जिसमें कहा गया है कि छवि नहीं है ...
फ्लोरिअनबेथगे

जवाबों:


230

Libgdx विकि से

जब आप डेस्कटॉप प्रोजेक्ट चलाते हैं

आवेदन पहली बार में विफल हो जाएगा। आपके द्वारा अभी बनाए गए रन कॉन्फ़िगरेशन को खोलें और कार्य निर्देशिका को Android / आस्तियों / निर्देशिका में सेट करें!

अपने डेस्कटॉप प्रोजेक्ट को एंड्रॉइड एसेट फ़ोल्डर से लिंक करें?

पर जाएं भागो => भागो विन्यास .. => चुनें DesktopLauncher , तर्क टैब => कार्य निर्देशिका => अन्य लोग तो करने के लिए ब्राउज़ करें yourproject-एंड्रॉयड / संपत्ति / और क्लिक लागू करें => भागो

यहां छवि विवरण दर्ज करें


उसी मुद्दे के साथ अन्य मदद करने के लिए, एंड्रॉइड बिल्ड के साथ समान निर्देशिका कार्य करने के लिए, हमें एंड्रॉइड / एसेट्स निर्देशिका पर राइट क्लिक करना होगा और बिल्ट पथ पर क्लिक करना होगा और इसे जोड़ना होगा।
lebill

10
यही मेरे लिए भी किया। क्या शर्म की बात है कि LibGDX के पास शुरू से ही यह मुद्दा है - यह एक शानदार प्रणाली है, लेकिन ऐसी चीजें जो थोड़ा धैर्य के साथ देवों को डराने वाली हैं।
रिचर्ड

बहुत बढ़िया! यह ऐसा करने के लिए समझाने के लिए एक पाठ क्षेत्र के साथ छवि को बदलने के लिए libgdx के लिए अधिक अर्थ नहीं देगा? मुझे लगता है कि एक साधारण Google खोज हर किसी को यहां ले जाती है, लेकिन कोई भी कम नहीं है, यह एक अजीब बात है, मुठभेड़ करने के लिए
काई किंग

1
यदि आपके पास Android / संपत्ति फ़ोल्डर नहीं है, तो डेस्कटॉप / संपत्ति फ़ोल्डर की स्थापना उसी तरह से करें जो मेरे लिए काम करता है।
फ्रेड्रिक एंडरसन

1
कृपया ध्यान दें कि यह एक समाधान नहीं है बल्कि एक समाधान है। यह अधिकांश परिस्थितियों में काम करेगा, लेकिन उन सभी में नहीं। उदाहरण के लिए, यदि आप डेस्कटॉप मॉड्यूल से एक बनावट एटलस उत्पन्न करने की योजना बनाते हैं, तो आपको पथों को फिर से बनाना होगा, जो कि डिफ़ॉल्ट रूप से डेस्कटॉप मॉड्यूल के सापेक्ष हैं।
फ्राँ मरज़ो

75

Android Studio या IntelliJ IDEA का उपयोग करने वाले लोगों के लिए, आपको इन चरणों का पालन करने की आवश्यकता है:

  1. मेनू से रन -> कॉन्फ़िगरेशन का चयन करें

  2. "वर्किंग डायरेक्टरी:" टेक्स्ट बॉक्स में, पथ में "/ Android / संपत्ति" जोड़ें।

ध्यान दें कि यदि आप ग्रेडिंग के साथ कार्यों को निष्पादित करते हैं, तो यह कोई समस्या नहीं है। एंड्रॉइड मॉड्यूल से एसेट फ़ोल्डर का उपयोग करने के लिए gradle.build फाइलें कॉन्फ़िगर की गई हैं।


13

ध्यान दें कि पिछले उत्तर उन उपयोगकर्ताओं के लिए काम नहीं करेंगे जिन्होंने सेटअप पर "एंड्रॉइड" बॉक्स को अनचेक किया था। वास्तव में उन लोगों के लिए एक डिफ़ॉल्ट संपत्ति फ़ोल्डर स्थापित होना चाहिए जो एंड्रॉइड के लिए तैनाती के बारे में परवाह नहीं करते हैं।


5
सही और सही, बस इसमें भाग गया; कोर में एसेट्स फोल्डर में डेस्कटॉप वर्किंग डायरेक्टरी सेट करना मेरे लिए काम कर गया।
नाफ्टालीमिच

@naftalimich हाँ, मुझे लगता है कि संपत्ति वास्तव में कोर में होनी चाहिए। मैं समझता हूं कि उन्होंने ऐसा क्यों किया, क्योंकि एंड्रॉइड ग्रेडल प्लगइन उन्हें वहां चाहता है और वे प्रत्येक बिल्ड / सिंक मुद्दों से निपटने के लिए w / कॉपी करना नहीं चाहते हैं। लेकिन यह वास्तव में संबोधित किया जाना चाहिए।
EntangledLoops

11

Intellij IDEA का उपयोग करने वालों के लिए:

  1. भागो -> विन्यास को संपादित करें
  2. बाएं हाथ की ओर चुनें: अनुप्रयोग -> DesktopLauncher
  3. "कॉन्फ़िगरेशन" -टैब में, "वर्किंग डायरेक्टरी" अपना एंड्रॉइड / एसेट्स पथ चुनें

3
आप उल्लेख कर सकते हैं: 1) इसके लिए आपको पहले एक डेस्कटॉप विन्यास बनाना होगा। 2) यह मानता है कि आपने अपना मूल प्रोजेक्ट बनाते समय Android का चयन किया था। 3) यह जवाब पहले से ही एंड्रॉइड स्टूडियो के निर्देशों के रूप में कोड-अपरेंटिस द्वारा प्रदान किया गया था, जो कि इंटेलीज आईडीई पर बनाया गया है।
EntangledLoops

6

इस तरह से आप इसे ठीक से काम कर निर्देशिका के साथ खेलने के बिना ठीक कर रहे हैं:

समस्या यह है कि एसेट फोल्डर को सही ढंग resourcesसे ग्रेडल बिल्ड के लिए निर्देशिका के रूप में चिह्नित नहीं किया गया है। इसे ठीक करने के लिए आपको ./core/build.gradleबिल्ड फ़ाइल में निम्न पंक्ति जोड़नी होगी:

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

मैं एक अलग समाधान का उपयोग करता हूं।

एप्लिकेशन रन कॉन्फ़िगरेशन बनाने के बजाय, ग्रैड बिल्ड कॉन्फ़िगरेशन बनाएं। कार्य हैdesktop:run । एक बार इसे अंजाम देने के बाद, गेम (चाहिए) लॉन्च हो जाता है और दुर्घटनाग्रस्त हुए बिना जीवित रहता है, और संसाधनों को ढूंढना चाहिए।

मुझे यकीन नहीं है कि क्यों, लेकिन जब एक ग्रैडल कार्य इस तरह चलाया जाता है, तो संसाधन मिलते हैं। जब कोई एप्लिकेशन रन कॉन्फ़िगरेशन का उपयोग किया जाता है (वर्तमान में स्वीकृत उत्तर की तरह संशोधनों के बिना) यह क्रैश हो जाता है क्योंकि यह संसाधन नहीं ढूंढ सकता है।


0

मैंने Android प्रोजेक्ट नहीं किया है। मेरा समाधान एसेट फोल्डर को जावा बिल्ड पाथ-> लाइब्रेरी को क्लास फोल्डर के रूप में जोड़ना है। इसके अलावा जावा बिल्ड पाथ-> ऑर्डर और एक्सपोर्ट में मौजूद एसेट फोल्डर को अन्य प्रोजेक्ट्स में शामिल करने के लिए चेक करें।


0

आप कार्यशील निर्देशिका या लिंक किए गए संसाधनों में एसेट्स का पथ देख सकते हैं। आपके द्वारा लोड की जा रही फ़ाइल के लिए जाँच के बाद। अंतिम बार प्रोजेक्ट को साफ और ताज़ा करें और आनंद लें।


0

IntelliJ में मुझे यही समस्या थी, और मैंने एंड्रॉइड के लिए libgdx प्रोजेक्ट नहीं बनाया था (Android विकल्प को चेक के रूप में चिह्नित नहीं किया गया था) और मुझे अभी भी वही त्रुटि मिल रही थी। कार्य निर्देशिका को "/ android / आस्तियों /" से जोड़ने के बजाय, इसे " / कोर / परिसंपत्तियों " से जोड़ा और इसने मेरे लिए ठीक काम किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.