2016-03-21 7 views
0

Eclipse a .wav dosyasını kaydediyorum ve programı çalıştırdığım her dördüncü veya beşinci seferde dosyayı iyi kaydeder. Çoğu zaman programın kendisi kilitleniyor ve dosya seçici çerçevesi dosyanın yerini seçmek için görünür hale geldiğinde ekran kararıyor. Bunun bazen neden olabileceğini bilen var mı? Eclipse konsol penceresinde bir hata vermez ve kod hatasız şekilde oluşturulur. yöntem başka kayıt kurulum sınıfınınNeden java programım bazen java filechooser ile bir dosya kaydetme yanıt vermiyor?

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

Kod plz? Eminim bu –

+0

ile bir şey var Belki başka bir süreç dosyayı kullanıyor? Bu olasılığı hesaba katmaya çalış. Belki her zaman yeni bir dosya yazar, asla üzerine yazmaz. – DavidS

+0

Yardım için teşekkürler. Çözdüm. Dosyayı kaydetmemek kaydıyla kayıt iş parçacığını durdurmaya çalışıyordu. –

cevap

0

Sen recorder.save aradığınız (WAVfile) olduğu tasarruf StopRecording ve saveFile Mainframe sınıfında içindedir vardır; iki defa. Sadece bir kez aramayı dene.

+0

Üzgünüm Bir keresinde bir şey farketmeden aramayı unutmayı unuttum. Program hala askıda kalıyor. –