微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我在 stackoverlflow 上发现了许多相关问题,但似乎没有一个我有用。 问题很简单:我尝试使用 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();

结果为: 引起:java.lang.IllegalAccessError: class com.sun.media.jfxmediaimpl.NativeMediaManager (in unnamed module @0x160d9abc) 无法访问 class com.sun.glass.utils.NativeLibLoader (in module javafx.graphics) 因为 module 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()”,因为“resource”为空 在 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-Text blocks ,没有声音的代码,javafx 项目正在为动画工作。

enter image description here

感谢任何帮助

解决方法

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

然后,您将再次遇到原始问题,这是由无法访问 javafx.media 模块引起的。我相信 this answer 应该对此有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?