java - 将Java程序的所有库、音频等包含在一个JAR文件中

标签 java netbeans audio jar getresource

我正在使用 Netbeans,我正在尝试弄清楚如何将所有库、音乐、图像等放入一个 JAR 文件中进行分发。我想我已经弄清楚了库,但是音频、图像和其他此类文件给我带来了麻烦。

在我当前的项目中,我有一个音频文件,我也想将其嵌入到 JAR 文件中。首先我尝试了one-jar但几个小时后我放弃了。我将音频文件放入 JAR 文件中,但我无法从程序中访问它。我知道我需要使用getResourceAsStream按照建议here但我不清楚获得输入流后我要做什么。我能看到让它工作的唯一方法是使用 InputStream并创建一个全新的文件(如下所示......并且它可以工作),但是创建一个新文件似乎是一种浪费(而且我不希望人们在我的程序时看到音频文件在跑)。 当音频文件仍包含在 .JAR 中时,是否无法直接访问该音频文件?文件?

File file = new File("myAudio.wav");
InputStream stream = mypackage.MyApp.class.getResourceAsStream("audio/myAudio.wav");
        try {
            OutputStream out = new FileOutputStream(file);
            byte buf[] = new byte[1024];
            int len;
            while ((len = inputStream.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            out.close();
            inputStream.close();
        } catch (IOException e) {
        }

编辑:

我的 JAR 文件的内部结构包含 1.) 一个库包 ( Jama ),2.) 我的包是我的类文件的直接父级,以及一个名为“audio”的文件夹,其中包含 myAudio.wav和 3.) a META-INF包含我的 manifest.mf 的文件夹.

编辑

音频流的读取方式如下。我尝试使用 InputStream直接但我还没有成功。我想再次指出,当我从包含 JAR 的音频文件的输入流创建新的音频文件时,我已经拥有了它。文件,但就像我之前说过的,当文件已存在于 JAR 中时,每次运行程序时创建一个大音频文件似乎是一种浪费。 。我试图避免这种文件重新创建。

AudioInputStream stream;
Clip music;
        try {
            stream = AudioSystem.getAudioInputStream(file);
        } catch (IOException e) {
        } catch (UnsupportedAudioFileException e) {
        }
        try {
            music = AudioSystem.getClip();
        } catch (LineUnavailableException e) {
        }
        try {
            start();
        } catch (Exception e) {
        }
public void start() throws Exception {
    music.open((AudioInputStream) stream);
    music.start();
    music.loop(Clip.LOOP_CONTINUOUSLY);
}

最佳答案

AudioSystem.getAudioInputStream(stream); 不适合您吗?

关于java - 将Java程序的所有库、音频等包含在一个JAR文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5815441/

相关文章:

java - 如何在 Java 中打印二维数组中的最大值路径?

java - 使用自定义词汇表将结果集流式传输为 RDF

java - 如何使用 Netbeans IDE 8.0 为 Web 应用程序创建 jar 文件

java - 在 JPanel 中实现图形

android - 如何在Android应用程序的onClick事件中添加声音?

java - 在中央找不到 Artifact org.jboss.seam :jboss-seam:jar:2. 3.5.Final-redhat-1

使用 Auth.GOOGLE_SIGN_IN_API 时的 java.lang.IllegalStateException : Must not set scopes in GoogleApiClient. Builder

java - Netbeans matisse,自定义按钮图标属性错误

javascript - 如何使用声音管理器2静音和取消静音?

android - getAudioMode [0]错误