我正在尝试使用一个整洁的库来播放mp3文件,我刚刚发现(JLayer),它在编译(在Netbeans中)时运行良好,使用以下代码:
ClassLoader cl = this.getClass().getClassLoader();
url = cl.getResource("music/45.mp3");
pin = new FileInputStream(url.getFile());
p = new Player(pin);
p.play();
我构建了我的项目并尝试运行可执行的jar。我扩展了JFrame,以便可以直观地看到程序正在运行。Frame在执行时出现,但没有声音。我认为使用类加载器会解决这个问题,但没有运气。帮助将非常感激!
当你有一个可能在jar文件中的资源时,不要使用FileInputStream
-使用ClassLoader.gerResourceAsStream
或Class.getResourceAsStream
。这就是他们存在的意义。您没有在磁盘上获得单独的文件,因此尝试使用FileInputStream
是毫无意义的。
(当然,您也可能发现您没有正确地使资源可用-但这是另一个问题。)
所以使用:
Player p = new Player(getClass().getResourceAsStream("/music/45.mp3"));
p.play();
(从您的代码中,看起来您比需要的更早地声明了变量—或者甚至可能在逻辑上应该只是局部变量时将它们声明为字段。这一点值得关注。请确保仅在真正想要指示类或实例的某些状态时才使用字段,并尽可能晚地声明局部变量(理想情况下在初始化时)