我正在尝试使用我刚刚发现的一个简洁的库(JLayer)来播放 mp3 文件,并且使用以下代码编译(在 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,这样我就可以直观地看到我的程序正在运行。执行时出现框架,但没有声音。我虽然使用类加载器可以解决这个问题,但没有运气。非常感谢您的帮助!
最佳答案
不要使用FileInputStream
当您拥有可能位于 jar 文件中的资源时 - 使用 ClassLoader.gerResourceAsStream
或Class.getResourceAsStream
。这就是他们存在的目的。您在磁盘上没有获得单独的文件,因此尝试使用 FileInputStream
是没有意义的。有了它。
(当然,您可能也发现您没有使资源正确可用 - 但这是一个单独的问题。)
所以只需使用:
Player p = new Player(getClass().getResourceAsStream("/music/45.mp3"));
p.play();
(从您的代码来看,您声明变量的时间似乎比您需要的要早得多 - 或者甚至可能将它们声明为字段,而逻辑上它们应该只是局部变量。值得密切关注。确保仅当您确实想要指示类或实例的某些状态时才使用字段,并尽可能晚地声明局部变量 - 最好是在初始化时。)
关于java - 文件输入流在编译器中工作正常,但在构建后无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14048117/