1

我正在用Java制作一个小游戏。对于这个游戏,我只是添加了声音。所以我想把我所有的图像和音频文件都放在罐子里。对于图片,这很容易:

new ImageIcon(Main.class.getResource("images/machgd2.png")).getImage()

但是对于音频,它仅在我在 Eclipse 中运行程序而不是从 jar 中运行时才有效。我用:

File soundFile = new File(Main.class.getResource(filename).getFile());

那么如何从 .jar 文件中获取该文件呢?

更新:

好的,得到它的工作,感谢安德鲁!为了播放声音,我使用了我在网上找到的一个类,我发现该类只是使用 File 来获取 AudioInputStream,所以我放弃了 File 的东西。

4

2 回答 2

5

当它在 jar 文件中时,它不是文件系统上的文件,是吗?您要么必须将 jar 文件中的文件复制到某个临时位置,要么使用不需要文件的 API(例如,只需要 aInputStream或 a的 API URL,两者都可以通过 jar 文件轻松getResourceAsStream获得getResource.)。

您还没有显示您在哪里使用soundFile- 如果您向我们展示您尝试使用哪些 API,我们可以尝试建议一个合适的替代方案。

于 2011-12-18T08:49:32.160 回答
3

请参阅SO的Java 声音信息页面中的“播放Clip以查看..

import java.net.URL;
import javax.swing.*;
import javax.sound.sampled.*;

public class LoopSound {

    public static void main(String[] args) throws Exception {
        URL url = new URL(
            "http://pscode.org/media/leftright.wav");
        Clip clip = AudioSystem.getClip();
        // getAudioInputStream() also accepts a File or InputStream
        AudioInputStream ais = AudioSystem.
            getAudioInputStream( url );
        clip.open(ais);
        // loop continuously
        clip.loop(-1);
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                // A GUI element to prevent the Clip's daemon Thread
                // from terminating at the end of the main()
                JOptionPane.showMessageDialog(null, "Close to exit!");
            }
        });
    }
}

您可能会注意到,其中使用了URL(由 返回getResource())而不是File。该方法被重载以也接受Fileor InputStream,但我URL最常使用基于版本的版本。

于 2011-12-18T08:59:06.553 回答