звук не играет в банке - PullRequest
       47

звук не играет в банке

0 голосов
/ 07 февраля 2011

Я упаковал все файлы классов и ресурсы как банку, но при исполнении звуковые файлы не воспроизводятся. Моя структура пакета:

+project
|_classes
|_ _*.class
|_resources
|_ _ *.jpg,*.wav

Код:

AudioInputStream inputStream = AudioSystem.getAudioInputStream(kidsClassRoom.class.getResourceAsStream("../resources/"+file));

получение null при выполнении этой строки !!

Ответы [ 5 ]

2 голосов
/ 07 февраля 2011

Альтернативная теория для уже представленных.Часто успешные вызовы getResource () зависят от экземпляра загрузчика классов, который вызывается для их обнаружения.По этой причине я бы рекомендовал использовать экземпляр определенного пользователем объекта, из которого вызывается getResource ().EG

// Sanity check
System.out.println("The value of 'file' is: " + file);
// Presuming kidsClassRoom1 is an instance of kidsClassRoom
AudioInputStream inputStream = AudioSystem.
    getAudioInputStream(
        kidsClassRoom1.
            getClass().
            getResourceAsStream("/resources/"+file));

Вы также можете заметить, что фрагмент использует префикс "/" для ресурса.Вопреки тому, что говорят другие, я уверен, что это означает «из корня» пути к ресурсу, независимо от того, какой Jar-путь на пути к классам выполнения найден.Если вы укажете '/' или '../', загрузчик класса будет искать ресурс в подпуть того класса, в котором это происходит.

Конечно - убедитесь, что Wav завершает работув банке!Скопируйте / переименуйте файл .jar в .zip и дважды щелкните его, чтобы быстро и грязно проверить содержимое архива в Windows.

1 голос
/ 09 марта 2013

Это моя функция для воспроизведения зацикленного звукового файла в банках, у меня она отлично работает.

Похоже, что getResourceAsStream() не работает с банками. однако getResource() делает.

public synchronized void alarm() {
    try {
        crit = AudioSystem.getClip();
        AudioInputStream inputStream1 = AudioSystem.getAudioInputStream(this.getClass().getResource("critical.wav"));
        crit.open(inputStream1);
        crit.loop(Clip.LOOP_CONTINUOUSLY);

    } catch (Exception e) {
        System.err.println(e.getMessage());
        }
}
1 голос
/ 07 февраля 2011

Создайте пакет с именем resources, как показано ниже enter image description here

, затем

 AudioSystem.getAudioInputStream(kidsClassRoom.class.getResourceAsStream("resources/"+file));
0 голосов
/ 28 июня 2016

Важно отметить, что в экспортированном банке ресурсы не хранятся в виде файлов (где-то читайте, кто-то более знающий, пожалуйста, введите).Поэтому лучше сначала получить ресурс в виде объекта URL, а затем передать его в объект AudioInputStream.

URL url = YourClass.class.getResource(filename);
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(url);

Если ресурс находится в подпапке, не забудьте добавить его в путь к имени файла.

0 голосов
/ 07 февраля 2011

Когда вы делаете getResourceAsStream, это не относительно текущего класса, а корня архива.То есть сначала попробуйте удалить ../.

...