2017-10-08 21 views
0

게임에서 소리를 추가하려고했지만 리소스 스트림을 읽을 때 AudioPlayer 클래스를 초기화 할 때 오류가 발생합니다. 나는 이것을 다른 게임 프로젝트에서 테스트했는데 아무런 오류없이 잘 작동했기 때문에 이상한 것이 었습니다.Java AudioInputStream은 하나의 프로젝트에서만 작동하지만 다른 프로젝트에서는 작동하지 않습니다.

public class AudioPlayer 
{ 
    private Clip clip; 

public AudioPlayer(String s) 
{ 
    try{ 
     AudioInputStream ais = AudioSystem.getAudioInputStream(getClass().getResourceAsStream(s)); 
     AudioFormat baseFormat = ais.getFormat(); 
     AudioFormat decodeFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(), 16, baseFormat.getChannels(), baseFormat.getChannels() * 2, baseFormat.getSampleRate(), false); 
     AudioInputStream dais = AudioSystem.getAudioInputStream(decodeFormat, ais); 

     clip = AudioSystem.getClip(); 
     clip.open(dais); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

    //methods here  

} 

을 그리고 여기에 오류 로그입니다 : 여기 내 코드는 AudioPlayer위한거야! "많은 재미"

내 프로젝트 폴더가 호출
Exception in thread "main" java.util.ServiceConfigurationError: javax.sound.sampled.spi.AudioFileReader: Error reading configuration file 
at java.util.ServiceLoader.fail(ServiceLoader.java:232) 
at java.util.ServiceLoader.parse(ServiceLoader.java:309) 
at java.util.ServiceLoader.access$200(ServiceLoader.java:185) 
at java.util.ServiceLoader$LazyIterator.hasNextService(ServiceLoader.java:357) 
at java.util.ServiceLoader$LazyIterator.hasNext(ServiceLoader.java:393) 
at java.util.ServiceLoader$1.hasNext(ServiceLoader.java:474) 
at com.sun.media.sound.JSSecurityManager$3.run(JSSecurityManager.java:180) 
at com.sun.media.sound.JSSecurityManager$3.run(JSSecurityManager.java:178) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.media.sound.JSSecurityManager.getProviders(JSSecurityManager.java:184) 
at com.sun.media.sound.JDK13Services.getProviders(JDK13Services.java:109) 
at javax.sound.sampled.AudioSystem.getProviders(AudioSystem.java:1631) 
at javax.sound.sampled.AudioSystem.getAudioFileReaders(AudioSystem.java:1406) 
at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1107) 
at main.audio.AudioPlayer.<init>(AudioPlayer.java:18) 
at main.states.Game.<init>(Game.java:65) 
at main.states.Game.main(Game.java:291) 
Caused by: java.io.FileNotFoundException: C:\Users\Matthew\Desktop\lots of fun (The system cannot find the file specified) 
at java.util.zip.ZipFile.open(Native Method) 
at java.util.zip.ZipFile.<init>(ZipFile.java:219) 
at java.util.zip.ZipFile.<init>(ZipFile.java:149) 
at java.util.jar.JarFile.<init>(JarFile.java:166) 
at java.util.jar.JarFile.<init>(JarFile.java:103) 
at sun.net.www.protocol.jar.URLJarFile.<init>(URLJarFile.java:93) 
at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:69) 
at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:94) 
at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:122) 
at sun.net.www.protocol.jar.JarURLConnection.getInputStream(JarURLConnection.java:150) 
at java.net.URL.openStream(URL.java:1045) 
at java.util.ServiceLoader.parse(ServiceLoader.java:304) 
+0

서비스 공급자를로드 할 때 Java가 실패하는 것 같습니다. 클래스 경로 문제일까요? 그것은 존재하지 않는'C : \ Users \ Matthew \ Desktop \ lots 많은 재미를보고있는 것 같습니다. – hendrik

+0

와우 나는 바보 같은 느낌이 들며 폴더는 "재미있게 보임"이라고 불린다. 느낌표와 함께, 그래서 당신이 그 하하 같은 이름을 자바를 깰 것 같아요. "!"을 꺼낸 후에 작동합니다. 감사합니다. –

답변

0

및/O를 "W 이름을 변경 한 후! " 그것은 작동 그래서 폴더 이름 아이에있는 상징을 두지 말라.