Почему 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. Любая идея, чтопроисходит?