我试图在这个Stack问题答案之后在BlueJ中播放一个mp3文件: Playing .mp3 and .wav in Java?
除了文件名,我有完全相同的代码。这是我的代码:
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
没有被初始化。如果是这种情况,我将如何处理它以及语法如何?
答案 0 :(得分:2)
Media
获取String
值并尝试制作URI
。为什么该方法并不仅仅要求您直接传递URI
(或URL
),我也不知道。
documentation很好地概述了这一点......
构造一个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规范,或 是不合规的形式,不能修改为合规 form。
- java.lang.IllegalArgumentException - 如果URI字符串有 null scheme。
- 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"
位于程序的当前工作目录中。
我说&#34;取决于&#34;因为你会对你的应用程序内部(捆绑)位于外部的媒体文件使用不同的方法。
在这种情况下,您可能会使用类似......
的内容Media hit = new Media(getClass().getResource(bip).toExternalForm());
MediaPlayer mediaPlayer = new MediaPlayer(hit);
mediaPlayer.play();
答案 1 :(得分:1)
这里你去:
MediaPlayer yourPlayer = new MediaPlayer(new Media(Paths.get("yourAudioFile").toUri().toString()));
确保将文件扩展名添加到音频文件中!另外,导入以下内容:
import java.nio.file.Paths;
我假设您已导入Media和MediaPlayer类。