我创建了一个在netbeans IDE中播放音频的项目。这些音频文件放在Classes文件夹中。 虽然当我将其创建为JAR文件时,却无法找到音频文件。我甚至将文件复制并粘贴到新的dist文件夹中。 这是一段代码:
private void playSound39()
{
try
{
/**Sound player code from:
http://alvinalexander.com/java/java-audio-example-java-au-play-sound
*/
// the input stream portion of this recipe comes from a javaworld.com article.
InputStream inputStream = getClass().getResourceAsStream("./beep39.wav");
AudioStream audioStream = new AudioStream(inputStream);
AudioPlayer.player.start(audioStream);
}
catch (Exception e)
{
JOptionPane.showMessageDialog(null,"Audio file not found!");
}
}
答案 0 :(得分:3)
如果要将音频文件嵌入程序中,必须将其放在包中的src
文件夹中。
例如,我将演示一个代码,用于将图标设置为按钮(也适用于音频文件):
在创建我写的JFrame时:
jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Icon/PatientBig.png")));
我的项目中有一个名为GUI
的软件包,其中包含一个名为Icons
的子包,其中存在我的图标,它们都位于src
文件夹中。
当您使用getClass().getResource
函数时,我更喜欢使用绝对路径
看到你的回复后,我注意到你在类路径的开头继续使用.
,我复制了你发布的代码片段并从路径的开头删除了.
并放置了我的音频文件{ {1}}在默认包中的bark.wav
文件夹中,它可以正常工作
src
然后我将音频文件放在一个名为public class test {
private void playSound39() {
try {
/**
* Sound player code from:
* http://alvinalexander.com/java/java-audio-example-java-au-play-sound
*/
// the input stream portion of this recipe comes from a javaworld.com article.
InputStream inputStream = getClass().getResourceAsStream("/bark.wav");
AudioStream audioStream = new AudioStream(inputStream);
AudioPlayer.player.start(audioStream);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Audio file not found!");
}
}
public static void main(String[] args){
new test().playSound39();
}
}
的包中,并修改了test1
函数中的路径,并再次起作用:
getResourceAsStream
最重要的是从路径中移除public class test {
private void playSound39() {
try {
/**
* Sound player code from:
* http://alvinalexander.com/java/java-audio-example-java-au-play-sound
*/
// the input stream portion of this recipe comes from a javaworld.com article.
InputStream inputStream = getClass().getResourceAsStream("/test1/bark.wav");
AudioStream audioStream = new AudioStream(inputStream);
AudioPlayer.player.start(audioStream);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Audio file not found!");
}
}
public static void main(String[] args){
new test().playSound39();
}
}
答案 1 :(得分:0)
试试这个
InputStream in = getClass().getResourceAsStream("/beep39.wav");
答案 2 :(得分:0)
我认为你需要绕过InputStream的使用。运行getAudioInputStream方法时,使用InputStream作为参数会触发音频文件的可标记性和可重置性测试。音频文件通常不通过这些测试。如果使用URL或File参数创建AudioInputStream,则会绕过这些测试。我更喜欢URL,因为它似乎更健壮,可以"看到"广口瓶中。
URL url = getClass().getResource("./beep39.wav");
AudioInputStream ais = AudioSystem.getAudioInputStream(url);
然后,在while循环中,您将在AudioInputStream上执行read方法并将数据发送到SourceDataLine。
Java教程在audio trail中介绍了这一点。这个链接跳到了教程的中间。
AFAIK,没有" AudioPlayer"在Java 7 SDK中。