如何解决如何从资源中获取 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 项目正在为动画工作。
感谢任何帮助
解决方法
资源为 null
可能是因为您给了 Class.getResource()
的相对路径,这意味着它将在与类的包对应的目录中查找。尝试改用 getResource("/music.mp3")
(注意斜线)。
然后,您将再次遇到原始问题,这是由无法访问 javafx.media
模块引起的。我相信 this answer 应该对此有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。