2016-07-23 30 views
0

當前我製作的項目是使用Jframe/Jpanel製作的遊戲。我使用的圖片的進口和聲音通過:Java中的圖像和聲音的相對路徑

圖片:

ImageIcon a = new ImageIcon("C:/Users/Home/IdeaProjects/Game/src/DragonRoll/sprites/user_sprite_down.png"); 
    player = a.getImage(); 
    //sign 

聲音:

String gongFile = ("C:/Users/Home/IdeaProjects/Game/src/DragonRoll/music/game_track.wav"); 
    InputStream in = new FileInputStream(gongFile); 
    AudioStream audioStream = new AudioStream(in); 
    AudioPlayer.player.start(audioStream); 

的圖像,並從示例配樂都被看作是從直接路徑不導入相對的意思是它不適用於其他計算機或設備,因爲它們不具有完全相同的路徑。有人可以推薦任何解決方案,請提供示例代碼。我試圖刪除路徑,除了包含圖像和圖像名稱本身,但沒有工作的文件夾。

我正在使用Intellij並作爲可執行的java文件運行。 還包含所有項目的文件夾是這樣: - 主要項目文件夾 - 分行到.idea,並SRC - src包含遊戲類和2個文件夾叫圖像和音樂

+0

你使用JAR嗎?你想在哪裏存儲你的資源文件?在你的程序中?在一個共同的目錄中?在一個相對的目錄? – davidxxx

+0

我有項目文件本身和src文件裏面我有我的課,然後在src裏面我也有2個文件夾一個用於圖像,另一個用於聲音 – Taka

+0

是的,但是你必須創建一個可執行文件來執行這個項目您的開發環境,如JAR。 你的前端api是什麼? – davidxxx

回答

0

按照慣例源Java項目中的文件(以.java結尾的所有內容)應位於名爲src/main/java的文件夾中。資源(如圖像,音頻文件,默認配置文件等)通常放在名爲src/main/resources的第二個源文件夾中。這樣編譯後的源文件(即.class文件)和資源文件將在您的應用程序運行時位於類路徑中。

加載例如從classpath中src/main/resources/DragonRole/music/game_track.wav資源,你可以簡單地這樣做:

InputStream gameTrackIn = MyClass.class.getResourceAsStream(
    "/DragonRole/music/game_track.wav"); 

加載從您的classpath中src/main/resources/DragonRoll/sprites/user_sprite_down.png資源,你可以簡單地這樣做:

ImageIcon userSpriteDownImg = new ImageIcon(MyClass.class.getResource(
    "/DragonRoll/sprites/user_sprite_down.png")); 

您的項目結構應該如下所示:

Game (project root) 
    └ src/main 
    ├ java (source root) 
    └ resources (resource root) 
+0

因此我將所有在DragonRoll中的類移動到src中的main文件夾中?我的理解是否正確,如果是的話,我會將這些課程從文件夾DragonRoll中移出並放入主文件夾中,或者放到名爲DragonRoll的整個文件夾中。 – Taka

+0

http://imgur.com/a/H8gyx那樣? – Taka

+0

是的,看起來不錯。但是,您需要確保在IntelliJ中將'java'文件夾標記爲「Source Root」並將'resources'文件夾標記爲「Resource Root」,而不是'src'文件夾。 – dpr

0

根據你的評論回覆,我建議你將你的資源文件放入jar中。 之後,訪問資源文件可以這樣完成:YourClass.class.getResource("sun.png")如果文件位於正確的位置。

您現在的主要任務是將資源文件放在方便的位置,並確保您可以使用期望的目錄中的預期文件創建JAR。 你似乎沒有使用Maven。這不是先決條件,但它可以很容易地創建jar的工作。
這是一個常見的問題。你應該找到一些很好的例子。

+0

http://imgur.com/a/H8gyx類似的東西? – Taka

+0

是的,但我沒有看到你的pom.xml。如果你不瞭解Maven,花點時間瞭解它的工作。 – davidxxx

+0

pom的用途是什麼?以及我將如何創建一個 – Taka

0

最終使用:

ImageIcon c = new ImageIcon("src/main/resources/sprites/new_background_panel.png"); 

這意味着它從源文件夾中尋找,而不是整個電腦路徑,感謝所有的人誰幫助了。

+0

當構建它時它不起作用 – Taka