【问题标题】:Including all libraries, audio, etc. of a Java program in one JAR file在一个 JAR 文件中包含一个 Java 程序的所有库、音频等
【发布时间】:2011-08-14 11:59:17
【问题描述】:

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

在我当前的项目中,我有一个音频文件,我也想将它嵌入到 JAR 文件中。首先我尝试了one-jar,但几个小时后我放弃了。我将音频文件放入 JAR 文件中就好了,但我无法从我的程序中访问它。我知道我需要按照here 的建议使用getResourceAsStream,但我不清楚在获得输入流后我会做什么。我能看到使它工作的唯一方法是使用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.) 一个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);
}

【问题讨论】:

  • 你能详细说明你的 jar 组织吗? (我的意思是,解压后的罐子上有一个tree
  • @Riduidel 我添加了一些细节。

标签: java netbeans audio jar getresource


【解决方案1】:

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

【讨论】:

  • 是的。你先生是那个人......不知道我是怎么错过的:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 2014-01-08
  • 2012-09-12
  • 2013-03-21
  • 1970-01-01
  • 2020-03-11
  • 2013-11-22
相关资源
最近更新 更多