2016-03-21 56 views
0

我使用Eclipse保存一个.wav文件,大概每四或五次运行一次该程序就可以保存文件。大多数情况下,程序本身只是挂起,当选择文件选择框时,屏幕会变黑。有谁知道为什么这会偶尔发生? Eclipse在控制台窗口中没有提供任何错误,并且代码没有错误就可以正常生成。 StopRecording和saveFile的是在大型机类 节省方法是在另外的记录设置类为什么我的java程序偶尔不回应用java filechooser保存文件?

private void stopRecording() { 
    isRecording = false; 
    try { 
     timer.cancel(); 
     RecordButton.setText("Record"); 
     RecordButton.setIcon(iconRecord); 
     recorder.stop(); 
     saveFile(); 

    } catch (IOException ex) { 
     JOptionPane.showMessageDialog(Mainframe.this, "Error", 
       "Error stopping sound recording!", 
       JOptionPane.ERROR_MESSAGE); 
     ex.printStackTrace(); 
    } 
} 


private void saveFile() { 
    JFileChooser fileChooser = new JFileChooser(); 
    FileFilter wavFilter = new FileFilter() { 
     @Override 
     public String getDescription() { 
      return "Sound file (*.WAV)"; 
     } 

     @Override 
     public boolean accept(File file) { 
      if (file.isDirectory()) { 
       return true; 
      } else { 
       return file.getName().toLowerCase().endsWith(".wav"); 
      } 
     } 
    }; 

    fileChooser.setFileFilter(wavFilter); 
    fileChooser.setAcceptAllFileFilterUsed(false); 

    int userChoice = fileChooser.showSaveDialog(this); 
    if (userChoice == JFileChooser.APPROVE_OPTION) { 
     saveFilePath = fileChooser.getSelectedFile().getAbsolutePath(); 
     if (!saveFilePath.toLowerCase().endsWith(".wav")) { 
      saveFilePath += ".wav"; 
     } 

     File wavFile = new File(saveFilePath); 

     try { 
      recorder.save(wavFile); 
      buttonPlay.setEnabled(true); 
      Keyup.setEnabled(true); 
      Keydown.setEnabled(true); 
      btnSave.setEnabled(true); 
      getKey.setEnabled(true); 
      System.out.print(saveFilePath); 

     } catch (IOException ex) { 
      JOptionPane.showMessageDialog(Mainframe.this, "Error", 
        "Error saving to sound file!", 
        JOptionPane.ERROR_MESSAGE); 
      ex.printStackTrace(); 
     } 
    } 
} 

public void save(File wavFile) throws IOException { 
    byte[] audioData = recordBytes.toByteArray(); 
    ByteArrayInputStream bais = new ByteArrayInputStream(audioData); 
    AudioInputStream audioInputStream = new AudioInputStream(bais, format, 
      audioData.length/format.getFrameSize());  
    AudioSystem.write(audioInputStream, AudioFileFormat.Type.WAVE, wavFile); 

    audioInputStream.close(); 
    recordBytes.close(); 
} 
+0

代码plz?我确定它有一些与该 –

+0

也许一些其他进程正在使用该文件?试着说明这种可能性。也许总是写一个新文件,永远不会覆盖。 – DavidS

+0

感谢您的帮助。我解决了它。它实际上挂在停止录音线程而不保存文件。 –

回答

0

要调用recorder.save(wavFile);两次。尝试只调用一次。

+0

对不起,我忘了把它们中的一个称为它曾经没有任何区别。该程序仍然挂起。 –

相关问题