java - 使用JavaFX播放音频"java.lang.IllegalArgumentException: uri.getScheme() == null! "错误

标签 java exception audio javafx

我正在尝试在 Java 和其中一种形式上播放 mp3 音频。我相信是 JavaFX,一切正常,直到我尝试播放音频。

这是代码:

import javax.sound.sampled.AudioPermission;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;


public class fx_main extends Application {

    @Override
    public void start(Stage primaryStage) {
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");


                Media m = new Media("/04.mp3");
                MediaPlayer mp = new MediaPlayer(m);

                mp.play();

            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);

         Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

  public static void main(String[] args) {
        launch(args);
    }
 }

当我按下按钮并尝试加载声音文件时,出现此异常:

   Hello World!
    Glass detected outstanding Java exception at -[GlassViewDelegate sendJavaMouseEvent:]:src/com/sun/mat/ui/GlassViewDelegate.m:543
    Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: uri.getScheme() == null!
        at com.sun.media.jfxmedia.locator.Locator.<init>(Locator.java:217)
        at javafx.scene.media.Media.<init>(Media.java:369)
        at fx_man$1.handle(fx_man.java:27)
        at fx_man$1.handle(fx_man.java:1)
        at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:69)
        at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
        at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
        at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
        at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
        at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:28)
        at javafx.event.Event.fireEvent(Event.java:171)
        at javafx.scene.Node.fireEvent(Node.java:6866)
        at javafx.scene.control.Button.fire(Button.java:179)
        at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:193)
        at com.sun.javafx.scene.control.skin.SkinBase$4.handle(SkinBase.java:336)
        at com.sun.javafx.scene.control.skin.SkinBase$4.handle(SkinBase.java:329)
        at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:64)
        at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
        at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
        at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
        at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
        at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:33)
        at javafx.event.Event.fireEvent(Event.java:171)
        at javafx.scene.Scene$MouseHandler.process(Scene.java:3369)
        at javafx.scene.Scene$MouseHandler.process(Scene.java:3209)
        at javafx.scene.Scene$MouseHandler.access$1900(Scene.java:3164)
        at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1582)
        at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2267)
        at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:250)
        at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:173)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:292)
        at com.sun.glass.ui.View.handleMouseEvent(View.java:530)
        at com.sun.glass.ui.View.notifyMouse(View.

java:924)

如何修复错误?我想在点击时播放音频文件?

最佳答案

Media 的构造函数需要一个 URL,因此您需要以 http://或 file://开头的内容

btn.setOnAction(e -> {
  Media m = new Media(Paths.get("04.mp3").toUri().toString());
  new MediaPlayer(m).play();
});`

参见 http://docs.oracle.com/javase/8/javafx/media-tutorial/simpleplayer.htm

这也有助于将 Path 和 File 对象都转换为 URL。

关于java - 使用JavaFX播放音频"java.lang.IllegalArgumentException: uri.getScheme() == null! "错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26028044/

相关文章:

python - python中的e.printStackTrace等价物

c# - 为什么 Visual Studio 在异常期间引用了错误的行?

c# - 如何播放要在设定的延迟下重复播放的音频片段阵列?

c# - 使用naudio动态播放音频文件

wpf - 如何在WPF中向媒体元素(Windows Media Player)添加自定义可视化

java - .jar 使用 -jar 标志运行

java - 我如何检查一个类没有参数构造函数

python - Python 异常的最佳实践?

java - Scala @specialized 注解无限递归?

java - 用正斜杠分割的正则表达式