我的程序100%来自编译器运行不从dist运行100%

时间:2017-02-11 08:45:36

标签: java ioexception

我的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();
}

1 个答案:

答案 0 :(得分:0)

在上面你使用相对路径来查找你的wav文件。从项目的根文件夹中,您将阅读' src / azcar / sounds / .wav',但是从dist文件夹中您可以有效地阅读' dist / src / azcar / sounds / .wav& #39;

您可以通过输入文件夹的绝对路径作为第一步来开始测试。之后,您可以转到将声音文件夹路径作为变量传递给您的应用程序。