为什么我的java程序偶尔不响应使用java filechooser保存文件?

为什么我的java程序偶尔不响应使用java filechooser保存文件?,java,Java,我正在使用Eclipse保存一个.wav文件,大约每运行四到五次程序,它就会很好地保存文件。大多数情况下,当文件选择器框变为可见以选择文件位置时,程序本身挂起,屏幕变黑。有人知道为什么偶尔会发生这种情况吗?Eclipse在控制台窗口中没有给出错误,代码构建良好,没有错误。 StopRecording和saveFile属于大型机类 save方法位于另一个录制设置类中 private void stopRecording() { isRecording = false; try {

我正在使用Eclipse保存一个.wav文件,大约每运行四到五次程序,它就会很好地保存文件。大多数情况下,当文件选择器框变为可见以选择文件位置时,程序本身挂起,屏幕变黑。有人知道为什么偶尔会发生这种情况吗?Eclipse在控制台窗口中没有给出错误,代码构建良好,没有错误。 StopRecording和saveFile属于大型机类 save方法位于另一个录制设置类中

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?我确信它与此有关也许其他进程正在使用该文件?试着解释一下这种可能性。也许总是写一个新文件,永远不要覆盖。谢谢你的帮助。我已经解决了。它实际上是挂在停止录制线程而不保存文件上的。对不起,我忘了带其中一个出去,调用一次也没什么区别。程序仍然挂起。