2013-07-13 2 views
0

오케이. 그래서이 코드를 가지고 있으며 이클립스에서 플레이하는 동안 작동합니다. 하지만 내보낼 때 소리가 전혀 들리지 않습니다. 어떻게 내 보내야합니까? 아니면 내 제품을 작동 시키려면 어떻게해야합니까?Java 게임을 만드는 동안 약간의 오류가 발생했습니다.

package sound; 
import java.io.InputStream; 
import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 
import javax.sound.sampled.Clip; 
public class GameSounds 
{ 
    public static synchronized void hit() 
    { 
     try 
     { 
      String resPath = "/sounds/8bit_bomb_explosion.wav"; // *** this is the key *** 
      InputStream audioInStream = GameSounds.class.getResourceAsStream(resPath); 
      System.out.println("is audioInStream null?: " + (audioInStream == null)); // test it! 
      AudioInputStream inputStream = AudioSystem.getAudioInputStream(audioInStream);   Clip clip = AudioSystem.getClip(); 
      clip.open(inputStream); 
      clip.start(); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

.. 내가 문제가 수출이다 에러가 생각하지 않습니다 .. 난 그냥 내보내기를 누른 후 나는 실행 jar 파일 .. 모두 작동하지만 오디오하지를 선택합니다 ..

을하고있다

출력을 로깅하면 "audioInStream null입니까?"라는 의미입니다. 그렇다면 출력은 false 이고 아무 예외도 throw되지 않습니다.

+5

로깅 결과는 무엇입니까? 그리고 예외가 throw됩니까? –

+0

1) 더 빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. 2) 문장의 시작 부분에 대문자를 추가하십시오. 또한 I라는 단어에는 대문자를 사용하고 JEE 또는 WAR와 같은 약어 및 머리 글자를 사용하십시오. 이것은 사람들이 이해하고 돕는 것을 더 쉽게 만듭니다. –

+0

항아리의 내용을 확인하십시오. 'sounds' 폴더 아래에'8bit_bomb_explosion.wav' 파일이 있습니까? jar 파일은 확장자가 .jar 인 zip 파일이라는 것을 기억하십시오. –

답변

0

문제는 아마 당신이 InputStream을 사용하고 있으며 표시 가능성 및 재설정 가능성을 테스트 할 수 있습니다. 오디오 파일은 일반적으로 둘 중 하나를 지원하지 않으므로 일종의 예외가 트리거됩니다.

해결 방법은 대신 URL을 사용하는 것입니다. 그런 다음 중간 InputStream 단계를 거치지 않고 AudioInputStream에 도달 할 수 있습니다.

따라서 String을 작성하는 대신 URL을 작성하고이를 getResourceAsStream() 메소드의 입력 매개 변수로 제공하십시오. 이 메소드의 스펙을 보면 File, URL, InputStream의 세 가지 오버로드가 표시됩니다. URL이 JAR 파일에 압축 된 리소스를 지정할 수 있고 표시/재설정 오류를 테스트하지 않았으므로 가장 잘 작동하는 URL을 찾습니다.

0

경로가 잘못되었거나 입력 스트림이 제대로 작동하지 않을 수 있습니다. 프로젝트를 내 보낸 횟수와 리소스가 올바르게로드되지 않은 것을 알 수 없습니다. 명령 프롬프트 나 터미널을 사용하여 항아리를 실행하는 것이 좋습니다. 어느 쪽의 방법이라도 명령이 같다고 생각합니다.

난 당신이 cmd를/터미널에서 그것을 실행하는 것이 좋습니다 이유는 때문에 cmd를/터미널에 나타납니다 발생할 수있는 다음 문제를 좀 더

-java 항아리 PathAndNameOfJar을 분해 시작할 수 있습니다 오류. 병

heres a video

관련 문제