Почему Java Sound ведет себя по-другому, когда я запускаю из .jar?

play Метод ниже из класса, который при создании экземпляра читает WAV-файл в байтовый массив с именемdataи сохраняет звуковой формат вAudioFormat объект называется.format

У меня есть программа, которая вызываетplay изjava.util.Timer, Когда я захожу в папку со всеми соответствующими файлами .class и запускаю программу с помощью командыjava MainClassвсе работает как положено. Однако, когда я помещаю все файлы .class в исполняемый файл .jar и запускаю программу с помощью командыjava -jar MyProgram.jarзвуки воспроизводятся с использованиемplay метод обрезается примерно через 50-150 мс.

public void play() throws LineUnavailableException {
    final Clip clip = (Clip)AudioSystem.getLine(new DataLine.Info(Clip.class, format));
    clip.open(format, data, 0, data.length);
    new Thread() {
        public void run() {
            clip.start();
            try {
                Thread.sleep(300); // all sounds are less than 300 ms long
            } catch (InterruptedException ex) { /* i know, i know... */ }
            clip.close();
        }
    }.start();
}

Несколько комментариев: я

мы пытались увеличить время сна вplay метод до 1000 мс, без изменений в поведении.

СрокиThread.sleep с помощьюSystem.nanoTime подтверждает, что поток спит ровно столько времени, сколько ожидалось.

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

мы пытались запустить программу как внутри, так и снаружи, используя параметры размера пула памяти-Xms2m а также-Xmx64m (отдельно), без изменений в поведении.

Я использую OpenJDK Java 6 в Ubuntu 11.04. Любая идея, чтопроисходит?

Ответы на вопрос(3)

Ваш ответ на вопрос