如何在JAR文件中播放音频?

时间:2019-08-05 17:21:22

标签: java audio audioinputstream

我是Java编程的新手,我将Java项目导出到可运行的JAR文件时尝试播放音频,但是当它尝试以JAR格式访问音频文件时,我总是遇到错误。

我尝试了两种方法来播放音频(一种被评论,另一种没有评论)。它们都在编译器中工作。没有注释的文件会给我JAR文件中的错误,而有注释的文件甚至不会运行JAR文件!

InputStream in;
AudioStream as;

public void PlayMusic(boolean a)
{
    try 
    {
        if (a == false)
        {
            AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(this.getClass().getResourceAsStream("./lose.wav"));
            Clip clip = AudioSystem.getClip();
            clip.open(audioInputStream);
            clip.start();
            /*in = getClass().getResourceAsStream("/connectfour/lose.wav");
            as = new AudioStream (in);
            AudioPlayer.player.start(as);*/
        }
        else
        {
            AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(this.getClass().getResourceAsStream("./win.wav"));
            Clip clip = AudioSystem.getClip();
            clip.open(audioInputStream);
            clip.start();
            /*in = getClass().getResourceAsStream("/connectfour/win.wav");
            as = new AudioStream (in);
            AudioPlayer.player.start(as);*/
        }


    }
    catch (Exception e)
    {
        JOptionPane.showMessageDialog(null, "Error");
    }
}

考虑到它在编译器中的工作原理,但在JAR中却没有问题,我认为我可能访问文件不正确。

编辑:已解决。我发现了有关使用URL的信息,因为它们可以在jar文件上使用。

1 个答案:

答案 0 :(得分:0)

尝试:

@Reference
private HttpClientBuilderFactory httpClientBuilderFactory;

public void doThis() {
  HttpClientBuilder builder = httpClientBuilderFactory.newBuilder();
  RequestConfig requestConfig = RequestConfig.custom()
    .setConnectTimeout(5000)
    .setSocketTimeout(5000)
    .build();
  builder.setDefaultRequestConfig(requestConfig);

  HttpClient httpClient = builder.build();

  // do something with the client
}

其中“ ./lose.wav”是音频文件相对于JAR文件(而不是相对于主类或src文件夹)的位置。