制作Java游戏时只是一点点错误

时间:2013-07-13 16:12:59

标签: java audio javasound

好的,所以我有这个代码,它在我在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 null吗?”如果是,则输出为假 而且没有异常抛出

2 个答案:

答案 0 :(得分:0)

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

解决方案是使用URL。然后,您可以在不通过中间InputStream步骤的情况下到达AudioInputStream。

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

答案 1 :(得分:0)

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

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

-java jar PathAndNameOfJar.jar

heres a video