0

我正在尝试使用我刚刚发现的简洁库(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,所以我可以直观地看到我的程序正在运行。执行时会出现 Frame,但没有声音。我虽然使用类加载器可以解决这个问题,但没有运气。帮助将不胜感激!

4

1 回答 1

1

FileInputStream当您有可能在 jar 文件中的资源时不要使用- 使用ClassLoader.gerResourceAsStreamClass.getResourceAsStream. 这就是他们的目的。您在磁盘上没有单独的文件,因此尝试使用它是没有意义的FileInputStream

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

所以只需使用:

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

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

于 2012-12-27T00:56:17.203 回答