2009-11-16 3 views
0

자바로 솔리테어 게임을하고 있는데, 책상을 뒤집거나 카드를 뒤집을 때 사운드를 구현해야합니다. 그것은 작동하지만, 널 포인터 예외 또는 mishandled URL 예외 (내가 조정할)에 따라 점점.
here
또한 netbeans 6.7.1을 내 IDE로 사용하고 있습니다.
나는 코드를 분해하고 설명하려고합니다 :JApplet의 사운드에 대한 약간의 도움이 필요합니다.

 

package cardgame; 

import java.applet.*; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.JApplet; 
import javax.swing.*; 
import java.io.*; 
import java.net.*; 

/** 
* 
* @author jacob 
*/ 
public class Sound extends JApplet { 

    private AudioClip song; // Sound player 
    private String URL = null; 
    private URL songPath; // Sound path 
    /* 
    *sound_1 = shuffling cards 
    *sound_2 = to discard 
    *sound_3 = from discard 
    *sound_4 = cardflip 1 
    *sound_5 = cardflip 2 
    */ 

    Sound(String filename) { 
     try { 
      songPath = new URL(getCodeBase(),filename); // Get the Sound URL 
     } catch (MalformedURLException ex) { 
      Logger.getLogger(Sound.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     song = getAudioClip(songPath); // Load the Sound 
    } 
    Sound(int i) { 
     URL = "./sounds/sound_" + i + ".wav"; 
     System.out.println(URL); 
     try { 
      songPath = new URL(URL); // Get the Sound URL 
      song = getAudioClip(songPath); 
     } catch (MalformedURLException ex) { 
      Logger.getLogger(Sound.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    public void playSound() { 
     song.loop(); // Play 
    } 

    public void stopSound() { 
     song.stop(); // Stop 
    } 

    public void playSoundOnce() { 
     song.play(); // Play only once 
    } 
} 

2 개의 서로 다른 construcors 내가이를 구현하려고 여러 가지 방법에 대한 것입니다. 첫 번째 것은 파일 경로를 만들고 그것을 전달합니다. 두 번째 파일 경로는 생성자에서 파일 경로를 만듭니다. # (나는 어떤 숫자가 참조 용 사운드에 해당하는지에 대한 목록을 만들었습니다). 다음과 같은 오류가 발생합니다.

 
./sounds/sound_1.wav 
Nov 16, 2009 4:14:13 PM cardgame.Sound 
./sounds/sound_2.wav 
SEVERE: null 
java.net.MalformedURLException: no protocol: ./sounds/sound_1.wav 
./sounds/sound_3.wav 
     at java.net.URL.(URL.java:583) 
     at java.net.URL.(URL.java:480) 
     at java.net.URL.(URL.java:429) 
./sounds/sound_4.wav 
./sounds/sound_5.wav 
     at cardgame.Sound.(Sound.java:46) 
     at cardgame.Game.loadSounds(Game.java:712) 
     at cardgame.Game.(Game.java:62) 
     at cardgame.Main.main(Main.java:25) 
Nov 16, 2009 4:14:13 PM cardgame.Sound 
SEVERE: null 
java.net.MalformedURLException: no protocol: ./sounds/sound_2.wav 
     at java.net.URL.(URL.java:583) 
     at java.net.URL.(URL.java:480) 
     at java.net.URL.(URL.java:429) 
     at cardgame.Sound.(Sound.java:46) 
     at cardgame.Game.loadSounds(Game.java:712) 
     at cardgame.Game.(Game.java:62) 
     at cardgame.Main.main(Main.java:25) 
Nov 16, 2009 4:14:13 PM cardgame.Sound 
SEVERE: null 
java.net.MalformedURLException: no protocol: ./sounds/sound_3.wav 
     at java.net.URL.(URL.java:583) 
     at java.net.URL.(URL.java:480) 
     at java.net.URL.(URL.java:429) 
     at cardgame.Sound.(Sound.java:46) 
     at cardgame.Game.loadSounds(Game.java:712) 
     at cardgame.Game.(Game.java:62) 
     at cardgame.Main.main(Main.java:25) 
Nov 16, 2009 4:14:13 PM cardgame.Sound 
SEVERE: null 
java.net.MalformedURLException: no protocol: ./sounds/sound_4.wav 
     at java.net.URL.(URL.java:583) 
     at java.net.URL.(URL.java:480) 
     at java.net.URL.(URL.java:429) 
     at cardgame.Sound.(Sound.java:46) 
     at cardgame.Game.loadSounds(Game.java:712) 
     at cardgame.Game.(Game.java:62) 
     at cardgame.Main.main(Main.java:25) 
Nov 16, 2009 4:14:13 PM cardgame.Sound 
SEVERE: null 
java.net.MalformedURLException: no protocol: ./sounds/sound_5.wav 
     at java.net.URL.(URL.java:583) 
     at java.net.URL.(URL.java:480) 
     at java.net.URL.(URL.java:429) 
     at cardgame.Sound.(Sound.java:46) 
     at cardgame.Game.loadSounds(Game.java:712) 
     at cardgame.Game.(Game.java:62) 
     at cardgame.Main.main(Main.java:25) 

도와 주신 분들께 감사드립니다. 나는 다소 길다는 것을 알고 있지만, 오히려 50 가지의 질문이 돌아 오거나 사람들이 초기 정보 부족으로 대답하지 못하게하는 것보다 오히려저기서 모든 것을 얻고 싶습니다. 또한 링크 만이

dreamincode.net/forums/showtopic14083.htm 아래에서 언급 그래서 내가 지금 하나의 링크를 게시 할 수 있습니다

deitel을 stackoverflow.com/questions/512436/java-playing-wav-sounds .co.kr/articles/java_tutorials/20060422/LoadingPlayingAudioClips/index.html

답변

0

애플릿 뷰어 또는 브라우저 플러그인에서 스택 추적에 따라 애플릿을 실행하지 않고 Main 및 Game 클래스를 통해 인스턴스를 생성하는 것은 분명합니다. 이 경우, getCodeBase는 null를 돌려줍니다 (애플릿이 실제로 애플릿으로서 실행되고있는 경우는, Java 코드의 기본 URL를 돌려줍니다). 따라서 URL 클래스는 정의되지 않은 시작점 (getCodeBase()의 결과)에서 상대 경로를 기반으로 URL을 만들려고 할 때 올바르게 불만을 제기합니다.

관련 문제