如何从资源中获取 JavaFX mp3 加载

How to get JavaFX mp3 load from recources

我在 stackoverlflow 上发现了许多相关问题,但 none 似乎对我有用。 问题很简单:我尝试用 javafx 媒体播放器播放 mp3。 使用代码:

@Override
    public void start(Stage theStage) throws MalformedURLException {

// this is the location, copy pasted from fileproperties in explorer :       
//  C:\Users\User\IdeaProjects\gamelogic3\src\main\resources\music.mp3        
        Media media = new Media("file:///Users/User/IdeaProjects/gameLogic3/src/main/resources/music.mp3");
        //Media media = new Media(MEDIA_URL);
        MediaPlayer mediaPlayer = new MediaPlayer(media);
        mediaPlayer.play();

结果: Caused by: java.lang.IllegalAccessError: class com.sun.media.jfxmediaimpl.NativeMediaManager (in unnamed module @0x160d9abc) cannot access class com.sun.glass.utils.NativeLibLoader (in module javafx.graphics) 因为模块 javafx.graphics 不导出 com.sun.glass.utils 到未命名模块 @0x160d9abc 在 com.sun.media.jfxmediaimpl.NativeMediaManager.lambda$new$0(NativeMediaManager.java:110) 在 java.base/java.security.AccessController.doPrivileged(AccessController.java:554) ...

起初,我尝试了最方便的方式:(从资源中加载它):

@Override
  public void start(Stage primaryStage) {
    final URL resource = getClass().getResource("music.mp3");
    final Media media = new Media(resource.toString());
    final MediaPlayer mediaPlayer = new MediaPlayer(media);
    mediaPlayer.play();

但这会导致空指针异常: 原因:java.lang.NullPointerException:无法调用“java.net.URL.toString()”,因为“资源”为空 在 mainStartup.Main.start(Main.java:57) 有什么奇怪的,因为这直接来自教程:http://www.java2s.com/Code/Java/JavaFX/Playmp3file.htm

我尝试了另外 2 个文件(mp3 和 wav),但结果相同。 我什至将文件复制到根文件夹并更改 url 但是 我可以从 Intellij 的资源文件中打开 mp3。当我在 Intellij 中重命名 mp3 文件时,我的代码中的名称也随之更改,所以我相信路径是正确的。

该项目在 windows 10 台机器上使用 openjdk-15 语言级别 15-文本块 ,没有声音代码,javafx 项目正在为动画工作。

感谢任何帮助

资源是 null 可能是因为你给了 Class.getResource() 的相对路径,这意味着它会在 class 包对应的目录中查找。尝试改用 getResource("/music.mp3")(注意斜杠)。

然而,您将 运行 再次陷入原来的问题,这是由于 javafx.media 模块无法访问造成的。我相信 应该对此有所帮助。