3

我查看了无数不同的 StackOverflow 答案以及来自其他站点的答案,但没有一个解决方案能解决我的问题。我一辈子都无法播放我的 .wav 文件。

这是我的代码:

声音类:

public class Sound {
/**
 * Static file paths for each sound.
 */
public static String stepSound = "/resources/step.wav";

/**
 * Audio input stream for this sound.
 */
private AudioInputStream audioInputStream;

/**
 * Audio clip for this sound.
 */
private Clip clip;

/* -- Constructor -- */

/**
 * Creates a new sound at the specified file path.
 * 
 * @param   path    File path to sound file
 */
public Sound(String path) {
    // Get the audio from the file
    try {
        // Convert the file path string to a URL
        URL sound = getClass().getResource(path);
        System.out.println(sound);

        // Get audio input stream from the file
        audioInputStream = AudioSystem.getAudioInputStream(sound);

        // Get clip resource
        clip = AudioSystem.getClip();

        // Open clip from audio input stream
        clip.open(audioInputStream);
    } catch (UnsupportedAudioFileException | IOException | LineUnavailableException e) {
        e.printStackTrace();
    }
}

/* -- Method -- */

/**
 * Play the sound.
 */
public void play() {
    // Stop clip if it's already running
    if (clip.isRunning())
        stop();

    // Rewind clip to beginning
    clip.setFramePosition(0);

    // Play clip
    clip.start();
}

/**
 * Stop the sound.
 */
public void stop() {
    clip.stop();
}
}

导致错误的构造函数调用:

// Play step sound
new Sound(Sound.stepSound).play();

我知道这不是第一次在这个网站上提出或回答此类问题,但我已经尝试了几个小时的其他解决方案,我发现的只是痛苦和沮丧。如果需要,我可以发布更多代码。提前致谢。

编辑:我已经解压了 .jar 文件并确认该文件确实存在。问题是 URL 最终为空,因此NullPointerException抛出了 a。

编辑#2:添加更多代码以防出现其他问题。

4

0 回答 0