如何从资源获取JavaFX mp3加载

如何从资源获取JavaFX mp3加载,java,javafx,Java,Javafx,我在StackFlow上发现了许多相关的问题,但似乎没有一个适合我。 问题很简单:我尝试用JavaFXMediaPlayer播放mp3。 使用代码: @Override public void start(Stage theStage) throws MalformedURLException { // this is the location, copy pasted from fileproperties in explorer : // C:\Users\User

我在StackFlow上发现了许多相关的问题,但似乎没有一个适合我。 问题很简单:我尝试用JavaFXMediaPlayer播放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();
结果如下: 原因:java.lang.IllegalAccessError:class com.sun.media.jfxmediimpl.nativemediamanamanager(在未命名模块@0x160d9abc中)无法访问class com.sun.glass.utils.NativeLibLoader(在模块javafx.graphics中),因为模块javafx.graphics不会将com.sun.glass.utils导出到未命名模块@0x160d9abc 在com.sun.media.jfxmediimpl.NativeMediaManager.lambda$new$0(NativeMediaManager.java:110) 位于java.base/java.security.AccessController.doPrivileged(AccessController.java:554)

首先,我尝试了最方便的方法:(从资源中加载):

但这会导致空指针异常: 原因:java.lang.NullPointerException:无法调用“java.net.URL.toString()”,因为“resource”为null 在mainStartup.Main.start(Main.java:57) 这有点奇怪,因为它直接来自于一个教程:

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

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


任何有助于的资源
null
可能是因为您提供了
Class.getResource()
的相对路径,这意味着它将在与类的包相对应的目录中查找。尝试改用
getResource(“/music.mp3”)
(注意斜杠)

但是,您将再次遇到原来的问题,这是由于无法访问
javafx.media
模块造成的。我相信这会有所帮助

@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();