使用javafx获取mp3文件

我今天花了好几个小时来查看如何在日食中获得某种forms的音频,并且在每一步都遇到了麻烦。 目前我有一些应该工作,但我收到一个错误:

线程“main”中的exceptionjava.lang.IllegalArgumentException:期望的文件名作为com.sun.javafx.css.parser.Css2Bin.main中的参数(Css2Bin.java:44)

我基本上是从有人工作的人那里复制了这个。 我想说FX lib应该添加到应有的位置。 我知道这不是幻想,但我只是尝试了基础知识。

package b; import java.io.File; import javafx.scene.media.Media; import javafx.scene.media.MediaPlayer; public class test { public static void main(String[] args){ String uriString = new File("C:\\Users\\Mike\\workspace\\b\\src\\hero.mp3").toURI().toString() MediaPlayer player = new MediaPlayer( new Media(uriString)); player.play(); }} 

我也尝试了许多不同的路径名,以防它没有运气错误,我也只是试图通过转到属性ex:/b/src/hero.mp3来复制并粘贴我在eclipse中获得的路径名。 我将不胜感激,让我摆脱这场噩梦。

位于工作区外的文件应包含在file://前缀中。 演示function的一个简单示例是

 public class Reproductor extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) throws Exception { Media media = new Media("file:///Movies/test.mp3"); //replace /Movies/test.mp3 with your file MediaPlayer player = new MediaPlayer(media); player.play(); } } 

我怀疑您在引用嵌入式资源时遇到问题。 嵌入式资源是包含在应用程序上下文中的任何文件(即,在这种情况下,存储在应用程序Jar中)。

为了获得对这些资源的引用,您需要使用Class#getResource ,它返回一个URL ,您可以根据需要使用该URL来加载资源,例如……

 public class Main extends Application { @Override public void start(Stage primaryStage) { String path = Test.class.getResource("/Kalimba.mp3").toString(); Media media = new Media(path); MediaPlayer mp = new MediaPlayer(media); mp.play(); System.out.println("Playing..."); } public static void main(String[] args) { launch(args); } } 

现在,在我包装在Application上下文之前,我无法让它工作……

如果文件是resources/music这将工作,应用程序将是可移植的.mp3 inside the .jar

 Media media = null; try { media = new Media(getClass().getResource("/music/hero.mp3").toURI().toString()); } catch (URISyntaxException e) { e.printStackTrace(); } 

在此处输入图像描述

JavaFX使用NetBeans将一个MP3嵌入jar(在jar中)

我在NetBeans中编写了我的第一个JavaFX包,然后我想在jar中添加声音,一个嵌入jar中的mp3音乐文件,以便我可以将jar发送给我的朋友,音乐将在他们的计算机上播放。 感谢StackOverflow的帮助。 特别感谢那位说“把你的音乐文件放在JAR中的成员,getResourceAsStream()是你想要使用的API。”他让我走上正轨,尽管我最终使用了getResource()。 有用。

第1步:首先,当我在NetBeans中运行时,我得到了音乐。

第2步:我希望音乐循环(重复)。 最终我得到了正确的,感谢StackOverflow的成员。 请参阅我的源代码。

第3步:最后我将jar转到EMBED中。 现在,这很重要。 起初音乐在我的电脑上播放,但是jar子从我的硬盘上读出来。 当我更改mp3的名称,然后jar崩溃,它不会运行,它找不到MP3。 我不得不将mp3嵌入jar中,将其放入jar中(在jar中),否则它将无法在别人的计算机上播放。 这就是getResource()的诀窍。

第4步:然后我通过电子邮件将我的jar子发送给朋友。 有些服务提供商不信任jar子,他们将电子邮件发回给我,未送达。 其他服务提供商没有问题并发送电子邮件。 那么,我做了什么? 我将* .jar的名称更改为* .mp4并且已发送电子邮件,我要求我的朋友将其从* .mp4更改为* .jar。 有效。

这是我的源代码。 我确信它并不完美,但是它有效,感谢StackOverflow。

  /* Of course, one needs to import the following gizmo's (and others): */ import javafx.util.Duration; import javafx.scene.media.Media; import javafx.scene.media.MediaPlayer; /* I want to EMBED the music inside the jar (in the jar). The secret seems to be getResource. The source code starts here, to EMBED the sound (DollyParton.mp3) into the jar: */ //************************ begin the music *********************** @Override public void start(Stage primaryStage) throws Exception { init(primaryStage); primaryStage.show(); play(); } public static void main(String[] args) { launch(args); } MediaPlayer musicplayer; { /* Put your music file IN THE JAR, "getResourceAsStream()" is the API you want to use. Put the DollyParton.mp3 into the Windows folder src/rockymountain. NetBeans automatically copies the mp3 to the folder build/classes/rockymountain. */ Media mp3MusicFile = new Media(getClass().getResource("DollyParton.mp3").toExternalForm()); musicplayer = new MediaPlayer(mp3MusicFile); musicplayer.setAutoPlay(true); musicplayer.setVolume(0.9); // from 0 to 1 //***************** loop (repeat) the music ****************** musicplayer.setOnEndOfMedia(new Runnable() { public void run() { musicplayer.seek(Duration.ZERO); } }); //*************** end of loop (repeat) the music ************** } //**************************** end of music ************************* 

我将mp3放入Windows文件夹src / rockymountain中。 然后NetBeans自动将mp3复制到文件夹build / classes / rockymountain。 NetBeans不会将mp3复制到文件夹/资源,这是我不必要地创建的文件,因为有人这么说。 不需要/ resources文件夹,它保持为空。

使用NetBeans创建Java ARchive(jar)文件,如下所示:

  1. 右键单击项目名称

  2. 选择属性

  3. 单击包装

  4. 编译后检查Build JAR

  5. 检查压缩JAR文件

  6. 单击“确定”接受更改

  7. 右键单击项目名称

  8. 选择清洁和构建

    JAR文件已构建。 要在NetBeans中查看它:

  9. 单击“文件”选项卡

  10. 展开ProjectName >> dist(发布)。 jar文件位于dist文件夹中。