0

好的,所以我有这段代码,当我在 Eclipse 中播放它时它正在工作。但是当我导出它时,它根本不播放任何声音..我应该如何导出它或者我应该怎么做才能让它工作?

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 是否为空?” 如果是,则输出为假,并且没有抛出异常

4

2 回答 2

0

问题可能是您正在使用 InputStream,并且可能会测试它们的可标记性和可重置性。音频文件通常都不支持,因此会触发某种异常。

解决方案是改用 URL。然后,您无需经过中间 InputStream 步骤即可到达 AudioInputStream。

因此,不是构建一个字符串,而是构建一个 URL 并将其作为 getResourceAsStream() 方法的输入参数。如果您查看此方法的规范,您将看到三个重载:文件、URL、InputStream。我发现 URL 效果最好,因为 URL 可以指定打包在 JAR 文件中的资源,并且不测试标记/重置错误。

于 2013-07-15T01:22:13.493 回答
0

也许你的路径不正确,或者输入流无法正常工作,我不知道我导出了多少次项目并且资源没有正确加载。我建议您使用命令提示符或终端运行 jar,无论哪种方式我认为命令是相同的。

我建议您从 cmd/terminal 运行它的原因是因为任何可能发生的错误都会出现在 cmd/terminal 中,然后您可以开始进一步分解问题

-java jar PathAndNameOfJar.jar

这是一个视频

于 2014-07-20T22:44:24.243 回答