2013-07-13 16 views
0

沒問題,所以我有這段代碼,它在Eclipse中播放時正在工作。但是當我導出它時,它根本不會播放任何聲音..我應該如何導出它,或者我應該怎麼做才能使其工作?製作Java遊戲時出現一個小錯誤

package sound; 
import java.io.InputStream; 
import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 
import javax.sound.sampled.Clip; 
public class GameSounds 
{ 
    public static synchronized void hit() 
    { 
     try 
     { 
      String resPath = "/sounds/8bit_bomb_explosion.wav"; // *** this is the key *** 
      InputStream audioInStream = GameSounds.class.getResourceAsStream(resPath); 
      System.out.println("is audioInStream null?: " + (audioInStream == null)); // test it! 
      AudioInputStream inputStream = AudioSystem.getAudioInputStream(audioInStream);   Clip clip = AudioSystem.getClip(); 
      clip.open(inputStream); 
      clip.start(); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

沒有錯誤..我認爲這個問題是出口..我只是按出口,然後我選擇可執行的JAR文件..一切正常,但音頻不..

和有沒有例外拋出

通過記錄輸出你的意思是「audioInStream null?」如果是,則輸出爲假 並且沒有拋出異常

+5

那麼你的日誌輸出是什麼?並且拋出異常? –

+0

1)爲了更好地提供幫助,請發佈[SSCCE](http://sscce.org/)。 2)請在句子開頭添加大寫字母。還要爲單詞I使用大寫字母,並使用JEE或WAR等縮寫詞和首字母縮略詞。這使人們更容易理解和幫助。 –

+0

檢查你的jar的內容。它是否包含文件'sounds'下的文件'8bit_bomb_explosion.wav'?請記住,jar文件只是一個擴展名爲.jar的zip文件。 –

回答

0

問題可能是您正在使用InputStream,並且可能會對它們進行標記性和可重置性測試。音頻文件通常不支持,所以會觸發某種異常。

解決方案是使用URL代替。然後,您可以在不經過中間InputStream步驟的情況下到達AudioInputStream。

因此,不是構建一個字符串,而是建立一個URL並將其作爲getResourceAsStream()方法的輸入參數。如果你看這個方法的規範,你會看到三個重載:File,URL,InputStream。我發現URL工作得最好,因爲URL可以指定打包在JAR文件中的資源,並且不會針對標記/重置錯誤進行測試。

0

也許你的路徑不正確,或者inputstream工作不正常,我不知道我有多少次導出項目,資源加載不正確。我建議你用命令提示符或終端運行你的jar,不管怎樣,我認爲命令是一樣的。

爲什麼我建議你從CMD /終端運行它的原因是因爲可能發生將出現在CMD /終端,然後你就可以開始打破該問題的更多一點

-java罐子PathAndNameOfJar任何錯誤。罐子

heres a video