簡體   English   中英

在BlueJ中播放mp3文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM