我的java progeam运行100%,如果我从编译器netbeans运行它,如果我从文件管理器运行它将在项目内的dist文件夹(程序有一个运行wav文件的按钮)按钮有一个捕获ioexception如果我从编译器运行声音将运行put如果我从dist文件夹运行它或移动然后运行到任何路径具有ioexception作为参数的catch将执行我使用audioSystem并使用Clip类使用它如此,如果Clip类尝试运行声音文件的第一种方式发生任何异常。代码:
public void getSoundData(int delay){
ActionListener taskPerformer = new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt){
try{
int random=(int)(Math.random()*12+1);
InputStream input = new FileInputStream("src/azcar/sounds/"+String.valueOf(random)+".wav");
AudioStream audio = new AudioStream(input);
AudioPlayer.player.start(audio);
} catch (Exception exc) {
try {
Clip clip = AudioSystem.getClip();
int random=(int)(Math.random()*12+1);
AudioInputStream input = AudioSystem.getAudioInputStream(new File("src/azcar/sounds/"+String.valueOf(random)+".wav"));
clip.open(input);
clip.start();
} catch (LineUnavailableException ex) {
JOptionPane.showMessageDialog(null, ex);
} catch (UnsupportedAudioFileException ex) {
JOptionPane.showMessageDialog(null, "نوع ملفات الصوت غير مدعوم");
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, "لم أتمكن من االوصول لملفات الصوت");
}
}
}
};
Timer timer = new Timer(delay*1000*60,taskPerformer);
timer.setRepeats(true);
timer.start();
}
答案 0 :(得分:0)
在上面你使用相对路径来查找你的wav文件。从项目的根文件夹中,您将阅读' src / azcar / sounds / .wav',但是从dist文件夹中您可以有效地阅读' dist / src / azcar / sounds / .wav& #39;
您可以通过输入文件夹的绝对路径作为第一步来开始测试。之后,您可以转到将声音文件夹路径作为变量传递给您的应用程序。