отметить / сбросить исключение во время getAudioInputStream()

#java #audio #java-7 #javasound

#java #Аудио #java-7 #javasound

Вопрос:

Я опубликовал исправление проблемы (описано ниже), но не смог подтвердить, решает ли это проблему. Может ли кто-нибудь с Java 7 попробовать следующий апплет и отчитаться? Это было бы ОЧЕНЬ ценно.

AudioMixerDemo

Проблема, о которой мне сообщили, заключалась в том, что верхний ряд кнопок, которые требуют загрузки звукового клипа из поврежденного ресурса, не работают. Ошибка указывает на строку, в которой читается аудиофайл, и говорит, что генерируется исключение ввода-вывода «mark / reset».

Этот код, работающий для Java 6, не работает для Java 7. Далее следует оскорбительное утверждение:

 AudioInputStream ais = AudioSystem.getAudioInputStream(
    AudioMixer.class.getResourceAsStream(fileName));
  

Внутренняя область возвращает InputStream , и я думаю, что именно здесь возникает проблема «заметности». Об этой проблеме сообщалось в базе данных ошибок Oracle как о проблеме обратной совместимости, но ей был присвоен низкий приоритет.

Я перекодировал вышесказанное следующим образом:

 URL url = AudioMixer.class.getResource(fileName);
AudioInputStream ais =  AudioSystem.getAudioInputStream(url); 
  

В AudioSystem API нет ничего, что упоминало бы, что этот метод будет генерировать исключения ввода-вывода «mark / reset». Итак, я надеюсь. Но я не смог это подтвердить!

Комментарии:

1. «О проблеме сообщалось в базе данных ошибок Oracle как о проблеме обратной совместимости, но ей был присвоен низкий приоритет». Какой идентификатор ошибки / URL?

2. КСТАТИ — AFAIU возможность поддержки пометки / сброса в URL зависит от сервера. Некоторые поддерживают это, некоторые нет. Надежный способ гарантировать входной поток mark (able) / reset (способный) — это прочитать весь, byte[] затем передать это конструктору a ByteArrayInputStream . О, и у меня не установлена Java 7, поэтому я не могу протестировать ваш апплет, извините. (Некоторое время назад я пробовал J7, и когда в моем приложении DukeBox произошел сбой. Я с отвращением удалил его — буду ждать менее глючный вариант.)

3. Как мне пометить это как «решаемое»?

Ответ №1:

Пользователь Java 7, который сообщил о проблеме, связался со мной и показал большой палец вверх. Итак, я предполагаю, что диагностика и исправление проблемы обратной совместимости верны, и больше не ищу тестировщиков (если только вы не заинтересованы просто в проверке AudioMixer).