[英]Playing an mp3 file in BlueJ
我正試圖在這個Stack問題答案之后在BlueJ中播放一個mp3文件: 在Java中播放.mp3和.wav?
除了文件名,我有完全相同的代碼。 這是我的代碼:
String bip = "Johnny.mp3";
Media hit = new Media(bip);
MediaPlayer mediaPlayer = new MediaPlayer(hit);
mediaPlayer.play();
我可以編譯它,但是當程序試圖運行它時我得到一個異常。 這是整個錯誤:
java.lang.IllegalArgumentException: uri.getScheme() == null! uri == 'Johnny.mp3'
at com.sun.media.jfxmedia.locator.Locator.<init>(Locator.java:211)
at javafx.scene.media.Media.<init>(Media.java:391)
at Game.goRoom(Game.java:282)
at Game.processCommand(Game.java:167)
at Game.play(Game.java:130)
就個人而言,我認為這與我給出的文件路徑有關。 我知道該文件存在於我的項目地圖中,但我對他們想要的路徑非常不確定,他們是否希望從file://一直到完整的路徑,或者只是我所做的聲音文件名? 請注意,此項目沒有像Eclipse項目那樣的任何資源文件夾,因為這是IDE處理文件的方式。 聲音文件與所有類位於同一文件夾中,因此不會以任何方式排序。
我已經檢查過,似乎如果這不是我的問題,那就是我的JavaFX
沒有初始化。 如果是這種情況,我將如何處理它以及語法如何?
Media
獲取您的String
值並嘗試創建URI
。 為什么該方法不僅要求您直接傳遞URI
(或URL
),我不知道。
文檔很好地概述了這一點......
構造一個Media實例。 這是指定媒體源的唯一方法。 源必須表示有效的URI並且是不可變的。 僅支持HTTP,FILE和JAR URL。 如果提供的URL無效,則會引發異常。 如果發生異步錯誤,將設置error屬性。 收聽此屬性以通知任何此類錯誤。
...
約束:
- 提供的URI必須符合java.net.URI要求的RFC-2396。
- 僅支持HTTP,FILE和JAR URI。
有關URI格式的更多信息,請參閱java.net.URI。 JAR URL語法在java.net.JarURLConnection中指定。
參數:
source - 源媒體的URI。
拋出:
- java.lang.NullPointerException - 如果URI字符串為null。
- java.lang.IllegalArgumentException - 如果URI字符串不符合RFC-2396或(如果適用)Jar URL規范,或者是不符合要求的形式,不能修改為兼容表單。
- java.lang.IllegalArgumentException - 如果URI字符串具有null方案。
- java.lang.UnsupportedOperationException - 如果不支持為源指定的協議。
...
如果我們查看源代碼,您可以看到它嘗試將String
包裝在URI
類中...
public Media(@NamedArg("source") String source) {
this.source = source;
URI uri = null;
try {
// URI will throw NPE if source == null: do not catch it!
uri = new URI(source);
} catch(URISyntaxException use) {
throw new IllegalArgumentException(use);
}
因此,根據文件的實際存儲位置,您可以使用類似的東西
Media hit = new Media(new File(bip).toURI().toURL().toString());
MediaPlayer mediaPlayer = new MediaPlayer(hit);
mediaPlayer.play();
這也假定"Johnny.mp3"
位於程序的當前工作目錄中。
我說“依賴”,因為你會對媒體文件使用不同的方法,這些媒體文件位於內部(捆綁)你的應用程序到外部。
在這種情況下,您可能會使用類似......
Media hit = new Media(getClass().getResource(bip).toExternalForm());
MediaPlayer mediaPlayer = new MediaPlayer(hit);
mediaPlayer.play();
你走了:
MediaPlayer yourPlayer = new MediaPlayer(new Media(Paths.get("yourAudioFile").toUri().toString()));
確保將文件擴展名添加到音頻文件中! 另外,導入以下內容:
import java.nio.file.Paths;
我假設您已導入Media和MediaPlayer類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.