2016-04-08 33 views
0

我使用JavaFx播放音樂文件的方法,但它不起作用(聲音未播放)。我覺得問題在於我的文件位置。我在哪裏可以將.mp3放在我的java項目文件夾中,以便用簡單的字符串引用它?還是有另一種方法來引用它? JavaFX Media接受一個String參數。我在哪裏把文件(.mp3)爲了它被讀取?

String test = "test.mp3"; 
Media x = new Media(test); 
MediaPlayer mediaPlayer = new MediaPlayer(x); 
mediaPlayer.play(); 
+0

你是否已經嘗試在文件路徑中傳遞文件?像「C:/用戶/你/文檔/ Java項目/項目1/test.mp3」 – wbrugato

+0

是的,它給了我一個錯誤提及非法字符。我有一個資源文件夾,我添加在我引用的庫中,我可以在那裏引用文件,無論程序運行在哪個硬盤上,但在這種情況下也不起作用。 –

回答

0

如果你讀過的Media的JavaDoc,那麼你知道你必須給一個HTTP,文件或JAR URI到您正在使用的構造函數。
其實從看源代碼我想知道你沒有得到IllegalArgumentException

但是,使用Class.getResource(...).toURI().toString()來獲取要給Media構造函數的字符串。
你調用這個對象的Class對象的組合和你給getResource()方法的組合取決於你如何佈局你的文件。
如果你有你的檔案,除了你的班級,getClass().getResource("file.name")應該工作。
如果你的文件在你的類路徑的根目錄下,getClass().getResource("/file.name")應該這樣做。

當然你也可以給任何其他有效的http,文件或jar URI給構造器。

+0

繼承人我的完整方法 public static void playSong() String test = getClass()。getResource(「test2.mp3」)。toURI()。toString(); 媒體x =新媒體(測試); MediaPlayer mediaPlayer = new MediaPlayer(x); mediaPlayer.play(); } 在getClass()下,它給出一個錯誤不能從類型Object中對非靜態方法getClass()進行靜態引用。我將test2.mp3文件放在與Sound類(包含此方法的類)相同的包中。對於這個奇怪的評論感到抱歉。我是這個網站的新手 –

+0

那麼,如果你在靜態環境中,不要使用'getClass()',而是使用'YourClassName.class'。 – Vampire

+0

感謝您的幫助,它的工作。對於那些查看這個並且有Toolkit問題未被初始化的人,請參考:http://tech.chitgoks.com/2013/05/11/how-to-fix-toolkit-not-initialized-error-in- java-fx /#comment-9240 對於MediaPlayer在5秒後靜音時遇到問題的用戶,請參考:http://stackoverflow.com/questions/6241687/mediaplayer-stop-playing-after-about-5-秒 –