java - 文件输入流在编译器中工作正常,但在构建后无法工作

标签 java audio netbeans classloader jlayer

我正在尝试使用我刚刚发现的一个简洁的库(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.gerResourceAsStreamClass.getResourceAsStream 。这就是他们存在的目的。您在磁盘上没有获得单独的文件,因此尝试使用 FileInputStream 是没有意义的。有了它。

(当然,您可能发现您没有使资源正确可用 - 但这是一个单独的问题。)

所以只需使用:

Player p = new Player(getClass().getResourceAsStream("/music/45.mp3"));
p.play();

(从您的代码来看,您声明变量的时间似乎比您需要的要早得多 - 或者甚至可能将它们声明为字段,而逻辑上它们应该只是局部变量。值得密切关注。确保仅当您确实想要指示类或实例的某些状态时才使用字段,并尽可能晚地声明局部变量 - 最好是在初始化时。)

关于java - 文件输入流在编译器中工作正常,但在构建后无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14048117/

相关文章:

java - 下载 javax.enterprise.context.RequestScoped 并将其添加到我的项目中

c - 在 Netbeans 8.1 中包括外部 C 库

java - JPA/Hibernate 是否支持迁移?

java - 为什么我无法将 geotools RasterToVectorFactory 导入到我的项目中?

javascript - 我正在寻找一个支持视频文件中的多个音轨/流的 web/html5/javascript 视频播放器

c++ - 播放纯音(一个频率)并识别频率C++

ios - 从 .m4a 数据中过滤频率

java - 如果@before在构造函数之后执行,那么如何初始化该类?

java - 为 Java 7 创建 Java 编译器插件

java - 如何将具有所有依赖项的 Netbeans maven 项目移动到其他计算机