2013-05-24 8 views
0

나는 매우 어색한 문제가 있습니다.jar 파일의 사운드 문제

현재 게임을 만들고 있는데 게임에서 소리가납니다. 그것은 jar 파일로 실행되어야하고 게임은 eclipse에서 실행할 때 완벽하게 작동합니다.

SoundPlayer는 게임에서 사용하는 외부 jar 라이브러리의 일부입니다. 그런 다음 이름, 폴더 및 사운드를 재생합니다. 사운드는 FTSound 개체 클래스가있는 폴더의 하위 폴더에 있습니다. 항아리를 확인했는데 사운드 파일이 포함되어 있으며 이클립스와 같은 위치에 있습니다. 이제 이상한 문제가 발생했습니다 :

jar 파일을 두 번 클릭하여 실행하면 사운드를 제외한 모든 것이 작동합니다. 그것은 완전히 빠져 있습니다. 그러나 cmd를 통해 항아리를 시작하면 사운드가 정상적으로 작동합니다. 그것은 똑같은 항아리입니다.

아이디어가 있으십니까? 도와 주셔서 감사합니다!

사운드는 다음 코드로 연주 :

public static void playSound(final FTSound sound) { 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try{ 
       Clip clip = AudioSystem.getClip(); 
       AudioInputStream inputStream = AudioSystem.getAudioInputStream(sound.getClass().getResource(sound.getFolderName() + "/" + sound.getSoundName())); 
       clip.open(inputStream); 
       clip.start(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }).start(); 
} 
+0

빨리 더 도움 들어, [SSCCE] (http://sscce.org/)을 게시 할 수 있습니다. –

답변

0

몇 가지 아이디어가 떠오른다. 일식을 사용한다고 했잖아요. .jar로 파일을 추출 할 때 오디오 파일이 모두 같은 위치에 추출되었는지 확인하십시오. 사운드 파일이 들어있는 디렉토리 외부의 .jar를 클릭하고 바로 가기는 아니지만 cmd의 동일한 디렉토리에서 실행하면 설명 된 문제가 발생할 수 있습니다. 문제가 실제로 해결되지는 않지만 명령 프롬프트에서 게임을 시작하기 위해 방망이를 작성하는 것이 좋습니다. 이렇게하면 사운드를 재생할 수있는 클릭 가능한 파일이 제공됩니다. 나는 당신의 코드에서 어떤 이슈도 보지 못한다. 그리고 만약 당신이 사운드를 연주한다면, 아마도 그럴 것 같지 않다. 또 다른 한가지 : 클립 객체는 몇 초 이상 소리를 잘 낼 수 없습니다. 당신이 음향 효과를 찾고 있다면, 그것은 큰하지만 그렇지 않으면, 당신은이 방법을 사용하여 시도해야합니다 :

new Thread(new Runnable() 
{ 
    SourceDataLine soundLine; 
    public void run() 
    { 
     soundLine = null; 
      int BUFFER_SIZE = 64*1024; // 64 KB 

       // Set up an audio input stream piped from the sound file. 
       try { 
       AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(this.getClass().getResource("title.wav")); 
       AudioFormat audioFormat = audioInputStream.getFormat(); 
       DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat); 
       soundLine = (SourceDataLine) AudioSystem.getLine(info); 
       soundLine.open(audioFormat); 
       soundLine.start(); 
       int nBytesRead = 0; 
       byte[] sampledData = new byte[BUFFER_SIZE]; 
       while (nBytesRead != -1) 
       { 
        nBytesRead = audioInputStream.read(sampledData, 0, sampledData.length); 
        if (nBytesRead >= 0) 
        { 
         // Writes audio data to the mixer via this source data line. 
         soundLine.write(sampledData, 0, nBytesRead); 
        } 

       } 
       } catch (Exception ex) 
       { 
       ex.printStackTrace(); 
       }finally 
       { 
       soundLine.drain(); 
       soundLine.close(); 
       } 
     } 
}).start(); 
+0

답변 해 주셔서 감사합니다! 나는 이것을 어떻게 고쳐야할지 모르겠다. 나는 잠시 동안 당신의 솔루션을 시험해 보았습니다. 그리고 항아리를 더블 클릭하면 소리가납니다. 이제 문제는 사운드가 잠시 동안 작동하고 나서 갑자기 컴퓨터의 모든 사운드를 지우고 재부팅해야한다는 것입니다. 내 사운드 카드가 원인 일 수 있다고 생각하지만 확실하지 않습니다. –

+0

그래, 그게 당신의 컴퓨터에 특정한 이슈처럼 들린다. 하지만이 방법은 때때로 재미 있습니다. 내 친구의 컴퓨터에서 꺼져 있으면 소리가 켜집니다. 그는 에이리언웨어를 가지고있다. 그러나 도시바에서는 완벽하게 작동합니다. 왜 그런지 모르겠다. – jaredad7