Включение всех библиотек, аудио и т. Д. Программы Java в одном файле JAR - PullRequest
0 голосов
/ 28 апреля 2011

Я использую Netbeans и пытаюсь выяснить, как я могу поместить все свои библиотеки, музыку, изображения и т. Д. В один файл JAR для распространения.Я думаю, что у меня есть библиотеки, но аудио, изображения и другие подобные файлы доставляют мне проблемы.

В моем текущем проекте у меня есть аудиофайл, который я тоже хочу встроить в файл JAR.Сначала я попробовал one-jar, но через пару часов я отказался от него.Я поместил аудио файл в файл JAR просто отлично, но я не могу получить к нему доступ из моей программы.Я знаю, что мне нужно использовать 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.

EDIT

Аудиопоток читается примерно так.Я пытался использовать 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);
}

1 Ответ

3 голосов
/ 28 апреля 2011

У вас AudioSystem.getAudioInputStream(stream); не работает?

...