2012-11-04 7 views
0

프로그램을 만들고 있는데, 프로그램이 열릴 때 사운드가 재생되기를 원합니다. 이 작업을 수행하는 가장 쉬운 방법은 .wav 파일을 내 jar의 src 폴더에 포함시키는 것입니다. 나는 파일을 files라고 불리는 패키지에 넣었고 그림과 같은 다른 파일들은 모두 그 패키지에 들어있어 모든 것이 잘 동작한다.임베디드 리소스에 액세스하는 중 오류가 발생했습니다.

public static void playSound(String dir, int loopTimes) throws Exception { 
    URL url = new File(dir).toURI().toURL(); 
    Clip clip = AudioSystem.getClip(); 
    // getAudioInputStream() also accepts a File or InputStream 
    AudioInputStream ais = AudioSystem.getAudioInputStream(url); 
    clip.open(ais); 
    if (loopTimes == -1) 
     loopTimes = Clip.LOOP_CONTINUOUSLY; 
    clip.loop(loopTimes); 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 

     } 
    }); 
} 

하고 그들이 내 바탕 화면, 내 문서에있을 때 다른 곳, 소리를 재생하기 위해 작동합니다 사운드 재생을위한 나의 방법은 여기에있다. 소리를 재생하기 위해 입력하는 경로는 "files/FBP.wav"이었습니다. FBP는 파일의 이름입니다. 내가 havent 어떤 솔루션을 구글에서 찾을 수 있었고, 나는 그것 때문에 기분이 JAR에 있습니다. 나는 또한 단지 이것을 시도했다 :

if(new File("files/FBP.wav").exists()){ 
     System.out.println("EXISTS!"); 
    } 
    System.exit(0); 

그리고 그것을 결코 출력하지 않는다. 나는 bin 폴더에도 있는지 확인했다. 나는 이클립스를 사용하고있다. 오류는 filenotfoundexception입니다. 어떤 도움을 주셔서 감사합니다! 미리 감사드립니다!

답변

2

은 교체 :

URL url = new File(dir).toURI().toURL(); 

으로 :

URL url = MySoundClassName.class.getClassLoader().getResource(dir); 

또는 비 정적 메소드를 :

URL url = getClass().getClassLoader().getResource(dir); 
+0

아니라 선생님, u는 이제 모든 계정에 마법사를 선포하고 있습니다. 이제는 더 빨리 버퍼링하는 방법을 알고 있습니까? 버퍼 때문에 실행 후 지연이 있습니다. 그걸 단축하는 법 알아? 또는 서브 루틴이 실행될 때마다 클립을로드하는 대신 – PulsePanda

+0

@wbAnon이 필요합니다. 전역 변수에 클립을 한 번만로드하고 호출 할 때마다 재생합니다. – Mordechai

+0

내가 그걸 어떻게 할 것인지 알고 있니? 당신이 무엇을 의미하는지 완전히 모르겠다. ... – PulsePanda

관련 문제