java - 制作Java游戏时出现一点错误

标签 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();
        }
    }
}

没有错误..我认为问题是导出..我只是按export,然后选择可执行的jar文件..一切正常,但是音频没有..

而且没有抛出异常

通过记录输出,您的意思是“audioInStream是否为空?”如果是,则输出为false
而且没有抛出异常

最佳答案

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

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

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

关于java - 制作Java游戏时出现一点错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17631948/

相关文章:

java - 通过另一个数组对数组进行二进制搜索的最佳方法是什么?

java - 使用 bouncy caSTLe 在 Java 中加密 xml 文件的示例

audio - 在 Asterisk 音乐中播放动态声音文件

audio - 在不同的音频文件中搜索相同的短样本

java - 在 Java 中将 MP3 转换为 PCM

java - 无法初始化类 io.confluence.kafka.schemaregistry.client.rest.RestService

java - Google 应用程序引擎,未通过推送部署进行部署

Delphi:混合两个音频流

Java MIDI 外部设备传输到音序器的接收器

java - 播放大型 wav 文件的特定部分