2012-02-15 4 views
1

이 주제에 대해 많은 스레드가 있지만 여전히 작동하지 않습니다. 컴파일러에서는 쉽게 작동하지만 jar 파일에서는 쉽게 작동하지 않습니다. jar 파일이 오디오 파일을 찾은 것 같지만 그냥 재생합니다.jar 파일에서 오디오 재생

import sun.audio.*; 
import java.awt.event.*; 
import java.io.*; 
import javax.swing.*; 

@SuppressWarnings({"serial","restriction"}) 
public class JarSoundTest1 extends JFrame { 
    JButton button; 
    InputStream in; 
    AudioStream as; 

    public JarSoundTest1() throws Exception { 

     JOptionPane.showMessageDialog(null, this.getClass().getResource("blopp.wav"));   

     button = new JButton("Click to Blopp!"); 
     button.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      try{ 
       in = this.getClass().getResourceAsStream("blopp.wav"); 
       as = new AudioStream (in); 
       AudioPlayer.player.start(as); 

       JOptionPane.showMessageDialog(null, "try"); 

      }catch(Exception ex){ 

       ex.printStackTrace(); 
       JOptionPane.showMessageDialog(null, "catch");    
      } 
     }  
     }); 
     add(button);  
    } 

    public static final void main(String[] args) throws Exception { 
     JFrame frame = new JarSoundTest1(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(200, 200); 
     frame.setVisible(true);  
    } 
} 

JOptionPane에 내가 가정 발견 된 파일을 나타내는 버튼을 클릭 할 때마다 "시도"표시? 여전히 소리가 들리지 않습니다. jar 파일 내부 및 외부에 배치 된 오디오 파일을 사용해 보았습니다. 이 점을 이해하는 데 도움을 주시면 감사하겠습니다.

+0

입니다. 이러한 구현에서는 시간이 지남에 따라 정확성이 보장되지 않기 때문에 Sun의 것보다 javax.sound.sampled를 사용하는 것이 좋습니다. – demongolem

답변

1

좋아, 나는 그것을 마침내 얻었다. 나는 그것이 당신과 매우 비슷한 코드로 놀 수있는 wav를 얻을 수 있기 때문에 나는 아주 확실한 사운드 이슈라고 생각하지 않는다. 그것은 매우 까다로울 수있는 jars 내의 리소스 문제이다. 나는 위의 코드를 편집에서 실험에 따라 다음을 제안합니다 :

는 getClass getClassLoader를

당신이 모두 getClass 사용하는 경우 대 경로는 슬래시로 시작해야합니다 /. 따라서 .wav가 최상위 수준 인 경우 ./blopp.wav가 좋습니다. .wav 파일이 sun.audio. *에 의해 인식되는 경우에만 조정할 수 있습니다.

jar에서 리소스를 찾을 수는 있지만 오디오를들을 수없는 경우 다른 .wav 파일을 시도해보십시오. 좋은 wav 파일은 here