2013-05-24 3 views
0

У меня очень странная проблема, которую я не могу исправить.Звуковые проблемы в файле jar

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

SoundPlayer является частью внешней библиотеки jar, которую я использую в игре. Затем он берет имя, папку и воспроизводит звук. Звук находится в подпапке папки, в которой находится класс объекта FTSound. Я проверил банку, и звуковые файлы включены, и они находятся на том же месте, что и в eclipse. Теперь к странной проблеме, с которой я столкнулся:

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

Любые идеи? Я буду очень благодарен за вашу помощь!

Звук воспроизводится с помощью следующего кода:

public static void playSound(final FTSound sound) { 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try{ 
       Clip clip = AudioSystem.getClip(); 
       AudioInputStream inputStream = AudioSystem.getAudioInputStream(sound.getClass().getResource(sound.getFolderName() + "/" + sound.getSoundName())); 
       clip.open(inputStream); 
       clip.start(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }).start(); 
} 
+0

Для лучшей помощи рано, опубликовать [SSCCE] (http://sscce.org/). –

ответ

0

Несколько идей приходят на ум. Вы сказали, что используете затмение. Когда вы извлекаете файлы в .jar, убедитесь, что ваши аудиофайлы извлечены в одно и то же место. Если вы нажимаете на .jar за пределами каталога, который содержит ваши звуковые файлы, и это не ярлык, но ваш запуск внутри одного и того же каталога в cmd, это может привести к проблеме, которую вы описали. Хотя на самом деле это не проблема, обходной путь, который я предлагаю, заключается в написании летучей мыши, чтобы начать игру в командной строке. это даст вам интерактивный файл, который также воспроизводит звук. Я не вижу никаких проблем в вашем коде, и если у вас есть звук для воспроизведения, то, вероятно, нет. Еще одна вещь: объект клипа не может работать хорошо звуком более нескольких секунд. Если вы ищете звуковой эффект, это здорово, но в противном случае, вы должны попробовать использовать этот метод:

new Thread(new Runnable() 
{ 
    SourceDataLine soundLine; 
    public void run() 
    { 
     soundLine = null; 
      int BUFFER_SIZE = 64*1024; // 64 KB 

       // Set up an audio input stream piped from the sound file. 
       try { 
       AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(this.getClass().getResource("title.wav")); 
       AudioFormat audioFormat = audioInputStream.getFormat(); 
       DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat); 
       soundLine = (SourceDataLine) AudioSystem.getLine(info); 
       soundLine.open(audioFormat); 
       soundLine.start(); 
       int nBytesRead = 0; 
       byte[] sampledData = new byte[BUFFER_SIZE]; 
       while (nBytesRead != -1) 
       { 
        nBytesRead = audioInputStream.read(sampledData, 0, sampledData.length); 
        if (nBytesRead >= 0) 
        { 
         // Writes audio data to the mixer via this source data line. 
         soundLine.write(sampledData, 0, nBytesRead); 
        } 

       } 
       } catch (Exception ex) 
       { 
       ex.printStackTrace(); 
       }finally 
       { 
       soundLine.drain(); 
       soundLine.close(); 
       } 
     } 
}).start(); 
+0

Спасибо за ваш ответ! Я не уверен, как это исправить. Я экспериментировал некоторое время, пытаясь решить ваше решение, и теперь я получаю звук, когда я дважды щелкаю банку. Проблема в том, что звук работает некоторое время, а затем внезапно он вытирает весь звук на компьютере, поэтому мне нужно перезагрузить его. Я думаю, что моя звуковая карта может быть причиной, но я не уверен. –

+0

Да, это звучит как проблема, характерная для вашего компьютера. Иногда этот метод забавный. На компьютере моего друга он выключает звук, если он выключен; у него есть отшельничество. Однако на моем Toshiba он работает отлично. Я понятия не имею, почему. – jaredad7

Смежные вопросы