Java音频流独立于平台
我使用以下方法播放音频剪辑:Java音频流独立于平台,java,windows,audioinputstream,Java,Windows,Audioinputstream,我使用以下方法播放音频剪辑: public static synchronized void playSound(final String path) { new Thread(new Runnable() { // The wrapper thread is unnecessary, unless it blocks on the // Clip finishing; see comments. public void run() {
public static synchronized void playSound(final String path) {
new Thread(new Runnable() {
// The wrapper thread is unnecessary, unless it blocks on the
// Clip finishing; see comments.
public void run() {
try {
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(
this.getClass().getClassLoader().getResourceAsStream(path));
clip.open(inputStream);
clip.loop(Clip.LOOP_CONTINUOUSLY);
while (runThread) {
Thread.sleep(5000);
}
clip.stop();
}
catch (Exception e) {
System.err.println("Audio clip error: "+e.getMessage());
e.printStackTrace();
}
}
}).start();
}
当我在Windows7桌面平台(联想)上运行这个程序时,它的工作原理与预期一样。但是,在windows 7笔记本电脑(Acer)上运行时,我会遇到以下异常:
java.lang.NullPointerException
at com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(Unknown Source)
at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
at StokerMonitor.Alerts$1.run(Alerts.java:62)
at java.lang.Thread.run(Unknown Source)
第62行是“AudioInputStream”语句。我不知道这两个平台之间有什么区别,但我猜笔记本电脑上肯定缺少一些Windows7依赖项。有人有什么建议吗?TIA.事实证明,在Eclipse中,不知何故,资源目录已从构建路径中删除。很抱歉打扰您。事实证明,在Eclipse中,不知何故,资源目录已从构建路径中删除。抱歉打扰您。
此.getClass().getClassLoader().getResourceAsStream(路径)
返回空值。验证.jar是否确实包含与该路径匹配的条目。请注意,getResourceAsStream不使用文件名作为参数,而是使用相对URL(没有方案或权限),在所有平台上都必须使用正斜杠(/
)作为目录分隔符。在两个平台上都是相同的jar。名为“path”的变量用词不当。它只是一个.wav文件名。path
的值是多少?它有所不同,但我用来测试的是“alarm.wav”。添加一个print语句以验证this.getClass().getClassLoader().getResourceAsStream(path)
是否返回非空值。并在每台机器上仔细检查.jar文件的大小(以字节为单位)。this.getClass().getClassLoader().getResourceAsStream(path)
返回null。验证.jar是否确实包含与该路径匹配的条目。请注意,getResourceAsStream不使用文件名作为参数,而是使用相对URL(没有方案或权限),在所有平台上都必须使用正斜杠(/
)作为目录分隔符。在两个平台上都是相同的jar。名为“path”的变量用词不当。它只是一个.wav文件名。path
的值是多少?它有所不同,但我用来测试的是“alarm.wav”。添加一个print语句以验证this.getClass().getClassLoader().getResourceAsStream(path)
是否返回非空值。并在每台机器上仔细检查.jar文件的大小(以字节为单位)。