当前位置: 首页 > 知识库问答 >
问题:

如何从资源获取JavaFX mp3负载[重复]

苗盛
2023-03-14

我在StackOverflow上找到了许多相关的问题,但似乎都不适合我。问题很简单:我尝试用javafx MediaPlayer播放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();

results in:原因:java.lang.IllegalAccesser错误:类com.sun.media.jfxMediaImpl.NativeMediaManager(在未命名模块@0x160D9ABC中)无法访问类com.sun.glass.utils.NativeLibloader(在模块javaFx.Graphics中),因为模块javaFx.Graphics没有将com.sun.glass.utils导出到未命名模块@0x160D9ABC中的

起初,我尝试了一种最方便的方法:(从参考资料中加载它):

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

但这会导致nullpointer异常:由:java.lang.NullPointerException引起:无法调用“java.net.url.ToString()”,因为MainStartup.Main.Start处的“resource”为null(main.java:57),这有点奇怪,因为这是直接从教程http://www.java2s.com/code/java/java/javafx/playmp3file.htm中得到的

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

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

有什么需要帮忙的吗

共有1个答案

董琦
2023-03-14

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

但是,您将再次遇到原来的问题,这是由javafx.media模块不可访问引起的。我相信这个答案应该对此有所帮助。

 类似资料:
  • 我有2个插件A和b。我在Require-Bundle部分有插件B。但是当我试图从A类中获取B的资源时 我得到null。如果我把B的资源(文件夹)放在A的根目录上,一切都像一个魅力。我错过了什么吗? 注:我读了拉尔斯·沃格尔的文章 ^这个解决方案在我从eclipse运行插件时有效,但当我将插件打包到jar并尝试从本地更新站点安装时 附言:我也读过几个关于堆栈溢出的相关问题,但无法找到答案: Java

  • 问题内容: 我正在使用以下方法从WildFly中的WAR文件获取资源: 当应用程序作为爆炸式WAR部署时,它可以工作。 它也曾经 与压缩的WAR一起 使用 。昨天,我在Eclipse中进行了项目的干净和重建,但它刚刚停止工作。 当我检查资源根目录时: 我得到这个: 因此,难怪它不起作用。它可能与JBoss模块加载有关,但是我不知道这是错误还是正常行为。 我在StackOverflow上发现了各种类

  • Cocos Creator 有一套统一的资源管理机制,在本篇教程,我们将介绍 资源属性的声明 如何在 属性检查器 里设置资源 动态加载资源 加载远程资源和设备资源 资源的依赖和释放 资源属性的声明 在 Creator 中,所有继承自 cc.Asset 的类型都统称资源,如 cc.Texture2D, cc.SpriteFrame, cc.AnimationClip, cc.Prefab 等。它们的

  • 使用脚本管理和加载资源,请参考脚本指南中的: 获取和加载资源

  • Cocos Creator 3D 采用与 Cocos Creator 统一的资源管理机制,在本篇教程,我们将介绍 资源属性的声明 如何在 属性检查器 里设置资源 动态加载资源 加载远程资源和设备资源 资源的依赖和释放 资源属性的声明 在 Cocos Creator 3D 中,所有继承自 Asset 的类型都统称资源,如 Texture2D, SpriteFrame, AnimationClip,

  • 我正在使用Eclipse Plugin-in-project开发一个Eclipse插件,它将在工具栏中添加一个菜单项。 请帮我解决这个问题!