Нужна небольшая помощь со звуком в JApplet - PullRequest
0 голосов
/ 17 ноября 2009

Я работаю над пасьянсом на Java, и мне нужно реализовать звук, когда стол перетасовывается, карта переворачивается и т. Д. Я использовал следующие сайты в качестве ссылки, чтобы попытаться заставить ее работать, но я получаю Null Исключения указателя или неправильно обработанное исключение URL (в зависимости от того, что я настраиваю).
здесь
Кроме того, я использую NetBeans 6.7.1 в качестве моей IDE.
Я постараюсь разбить код и объяснить:


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 разных конструктора для разных способов, которые я пытался реализовать. Первый создает путь к файлу и передает его. Второй создает путь к файлу в конструкторе с учетом звука # (я составил список того, какие числа соответствуют тому, что звучит для справки). Я получаю следующие ошибки:

./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 / форумы / showtopic14083.htm
stackoverflow.com/questions/512436/java-playing-wav-sounds
deitel.com/articles/java_tutorials/20060422/LoadingPlayingAudioClips/index.html

1 Ответ

0 голосов
/ 17 ноября 2009

Согласно трассировке стека, вы явно не запускаете апплет в средстве просмотра апплетов или плагине браузера, а создаете его экземпляры с помощью классов Main и Game. В этом случае getCodeBase вернет значение null (возвращает базовый URL-адрес для кода Java, если апплет фактически запущен как апплет). Следовательно, класс URL корректно жалуется, когда вы пытаетесь создать URL на основе относительного пути из неопределенной начальной точки (результат getCodeBase ()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...