为什么我的java程序偶尔不响应使用java filechooser保存文件?
我正在使用Eclipse保存一个.wav文件,大约每运行四到五次程序,它就会很好地保存文件。大多数情况下,当文件选择器框变为可见以选择文件位置时,程序本身挂起,屏幕变黑。有人知道为什么偶尔会发生这种情况吗?Eclipse在控制台窗口中没有给出错误,代码构建良好,没有错误。 StopRecording和saveFile属于大型机类 save方法位于另一个录制设置类中为什么我的java程序偶尔不响应使用java filechooser保存文件?,java,Java,我正在使用Eclipse保存一个.wav文件,大约每运行四到五次程序,它就会很好地保存文件。大多数情况下,当文件选择器框变为可见以选择文件位置时,程序本身挂起,屏幕变黑。有人知道为什么偶尔会发生这种情况吗?Eclipse在控制台窗口中没有给出错误,代码构建良好,没有错误。 StopRecording和saveFile属于大型机类 save方法位于另一个录制设置类中 private void stopRecording() { isRecording = false; try {
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();
}
您正在调用recorder.save(wavFile);两次。试着只调用一次。编码plz?我确信它与此有关也许其他进程正在使用该文件?试着解释一下这种可能性。也许总是写一个新文件,永远不要覆盖。谢谢你的帮助。我已经解决了。它实际上是挂在停止录制线程而不保存文件上的。对不起,我忘了带其中一个出去,调用一次也没什么区别。程序仍然挂起。