我刚开始使用JavaFX。我知道它的基础知识是如何工作的。我尝试使用媒体和媒体播放器类播放声音,称为“sound.mp3”。我在eclipse中编程,我在src文件夹中有声音文件,与“(默认包)”相同的文件夹。这是我的代码:
import javafx.scene.media.*;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Hello World!");
String ssound = "sound.mp3";
Media sound = new Media(ssound);
MediaPlayer mediaPlayer = new MediaPlayer(sound);
mediaPlayer.play();
StackPane root = new StackPane();
primaryStage.setScene(new Scene(root, 800, 450));
primaryStage.show();
}
}
请告诉我我做错了什么。
以下是来自控制台的错误消息:
Exception in Application start method
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
at com.sun.javafx.application.LauncherImpl.access$000(Unknown Source)
at com.sun.javafx.application.LauncherImpl$1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:724) Caused by: java.lang.IllegalArgumentException: uri.getScheme() == null!
at com.sun.media.jfxmedia.locator.Locator.<init>(Unknown Source)
at javafx.scene.media.Media.<init>(Unknown Source)
at Main.start(Main.java:16)
at com.sun.javafx.application.LauncherImpl$5.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl$5.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl$4$1.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl$4$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl$4.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access$100(Unknown Source)
at com.sun.glass.ui.win.WinApplication$3$1.run(Unknown Source) ... 1 more
答案 0 :(得分:13)
只是对其他答案所说的工作汇编:
String musicFile = "StayTheNight.mp3"; // For example
Media sound = new Media(new File(musicFile).toURI().toString());
MediaPlayer mediaPlayer = new MediaPlayer(sound);
mediaPlayer.play();
在项目文件夹中添加音乐文件,以及bin
和src
。
任何IDE都会提示您添加这些内容:
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import java.io.File;
像魅力一样工作。
答案 1 :(得分:5)
mApplause = new AudioClip(this.getClass().getResource("/sounds/applause.mp3").toExternalForm());
所以这就是我使用它并且它起作用,我知道它不再重要但是因为它进入我的谷歌搜索,而我正在寻找别的东西,我以为我会回答它。 :)
这意味着它告诉toExternal Form形成路径文件的url形式。
答案 2 :(得分:2)
这就是我目前使用的:
Media hit = new Media(new File(soundFilename).toURI().toString());
答案 3 :(得分:0)
这取决于音频文件在哪里。 (也仅接受.wav) 如果剪辑位于src文件夹之外,则需要使用
new Media("file:sound.wav")
如果不是,那你还好吗
答案 4 :(得分:0)
这里的其他答案对我不起作用,但这确实有效:
Media sound = new Media(getClass().getResource("sounds/sound.mp3").toExternalForm());
MediaPlayer mediaPlayer = new MediaPlayer(sound);
mediaPlayer.play();
答案 5 :(得分:0)
我遇到了同样的问题。就我而言,它是关于对 javaFX 的访问。假设您使用 IntelliJ IDEA,请转到“运行”->“编辑配置”,选择“修改选项”,单击“添加 VM 选项”,然后粘贴: --module-path /PATH/TO/YOUR/JAVAFX/LIB --add-modules javafx.controls,javafx.fxml,javafx.base,javafx.media (将 /PATH/TO/YOUR/JAVAFX/LIB 替换为您计算机上 javafx 安装目录中“lib”文件夹的目录。 这类似于这个官方教程中所说的:Create-a-javafx-project-with-IntelliJ ;但是添加了模块 javafx.media 和 javafx.base。
请注意,根据我的搜索和经验,javaFX 11 无法播放 .mp3 文件(与 .wav 文件不同)。您可能需要考虑将 javaFX 更新为 16 以播放 .mp3 文件。