Java 声音不适用于 Windows,但适用于 OS X
Java sound doesn't work on Windows, but work on OS X
我在 java 应用程序中播放声音时遇到问题。用户收到消息时正在播放声音。在 OS X 上一切正常,但在 Windows 上却没有。我使用以下命令将文件放入 jar:jar uf client.jar getMsgSound.wav 。我想问题出在找到这个文件上。
public String soundName = "getMsgSound.wav";
public void playSound()
{
try {
File soundFile = new File(soundName);
AudioInputStream audioIn = AudioSystem.getAudioInputStream(soundFile);
Clip clip = AudioSystem.getClip();
clip.open(audioIn);
clip.start();
} catch (UnsupportedAudioFileException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (LineUnavailableException e) {
e.printStackTrace();
}
}
即使它在 Mac OS 上,我也不认为你可以通过这种方式从 jar 中读取文件。您可能恰好将文件放在项目中的某个位置并加载了它。
我刚刚测试了直接读取文件而不将其放入 jar 中,它对 Mac OS 和 Windows 都有效。
正如 Greg 刚刚在评论中指出的那样,您应该使用 ClassLoader 从 jar 文件加载它。
请参阅 this post 了解如何使用 ClassLoader 加载资源。
我在 java 应用程序中播放声音时遇到问题。用户收到消息时正在播放声音。在 OS X 上一切正常,但在 Windows 上却没有。我使用以下命令将文件放入 jar:jar uf client.jar getMsgSound.wav 。我想问题出在找到这个文件上。
public String soundName = "getMsgSound.wav";
public void playSound()
{
try {
File soundFile = new File(soundName);
AudioInputStream audioIn = AudioSystem.getAudioInputStream(soundFile);
Clip clip = AudioSystem.getClip();
clip.open(audioIn);
clip.start();
} catch (UnsupportedAudioFileException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (LineUnavailableException e) {
e.printStackTrace();
}
}
即使它在 Mac OS 上,我也不认为你可以通过这种方式从 jar 中读取文件。您可能恰好将文件放在项目中的某个位置并加载了它。
我刚刚测试了直接读取文件而不将其放入 jar 中,它对 Mac OS 和 Windows 都有效。
正如 Greg 刚刚在评论中指出的那样,您应该使用 ClassLoader 从 jar 文件加载它。
请参阅 this post 了解如何使用 ClassLoader 加载资源。