如何从资源中获取 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
模块无法访问造成的。我相信 应该对此有所帮助。
我在 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
模块无法访问造成的。我相信