2016-04-10 33 views
1

benim oyun için bir yeni ses sistemi yazıyorum ve ben bu hata rastlamak ve bulmak ve her yerde çözüm gibi olamaz,yükleme hatası ses

java.lang.IllegalArgumentException: illegal call to open() in interface Clip 
at com.sun.media.sound.DirectAudioDevice$DirectClip.implOpen(Unknown Source) 
at com.sun.media.sound.AbstractDataLine.open(Unknown Source) 
at com.sun.media.sound.AbstractDataLine.open(Unknown Source) 

Bu, sesimi yüklemek ve oynatmak için kullanacağım kod.

private Clip load(String filename) {   
    try { 
     //Loads the file 
     InputStream in = new FileInputStream(new File("res/" + filename + FILE_EXT)); 
     //Create the input buffer 
     InputStream bufferedIn = new BufferedInputStream(in); 
     //Convert into an audio stream 
     AudioInputStream audioStream = AudioSystem.getAudioInputStream(bufferedIn); 
     //Get the audio format 
     AudioFormat format = audioStream.getFormat(); 
     //Get the data line info 
     DataLine.Info info = new DataLine.Info(Clip.class, format); 
     //Return the clip 
     Clip audioClip = (Clip) AudioSystem.getLine(info); 
     audioClip.addLineListener(this); 
     return this.clip = audioClip; 
    } catch (FileNotFoundException e) { 
     System.err.println("Failed to load audio! " + filename + " not found!"); 
     throw new RuntimeException(e); 
    } catch (UnsupportedAudioFileException e) { 
     System.err.println("Failed to load audio! " + filename + " is unsupported!"); 
     throw new RuntimeException(e); 
    } catch (IOException e) { 
     System.err.println("Failed to load audio! " + filename + " caused an IO Exception!"); 
     throw new RuntimeException(e); 
    } catch (LineUnavailableException e) { 
     System.err.println("Failed to load audio! " + filename + " line is unavalible!"); 
     e.printStackTrace(); 
    } 
    throw new RuntimeException("Failed to load audio! input == null!"); 
} 

private void startClip() { 
    if(this.clip != null) this.clip.start(); 
    else throw new RuntimeException("Failed to start audio clip! The clip appears to be null."); 
} 

private void stopClip() { 
    if(this.clip != null) this.clip.close(); 
    else throw new RuntimeException("Failed to close audio clip! The clip appears to be null."); 
} 

@Override 
public void play() { 
    try { 
     if(isPlaying()) return; 
     else { 
      startClip(); 
      this.clip.open(); 
      this.playing = true; 
     } 
    } catch (LineUnavailableException e) { 
     e.printStackTrace(); 
    } 
} 

Hata, this.clip.open();

Bana yardım eden var mı?

cevap

2

Oynatmak için Clip ürününe hiçbir şey iletmezsiniz.

Line#open

:

IllegalArgumentException - Bu yöntem Clip örneğinde adı verilir.

clip.open() yerine clip.open(audioStream) numaralı telefonu aramanız gerekir. Ayrıca, Clip'u kullanarak'dan önce bunu yapmalısınız.