2014-11-03 3 views
0

Я пытаюсь открыть аудиофайлы, но он не работает. Я не знаю, была ли это ОС или что-то еще, но когда я был в Windows, у меня не было этой проблемы. Я получаю исключение NullPointerException здесь ошибка; Я попробовал апплет, bufferedInputStream, FileStream, AudioInputStream. Ничего не работает. Я нахожусь в Linux.Я получаю исключение NullPointerException при открытии звука

Exception in thread "main" java.lang.NullPointerException 
    at com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(SoftMidiAudioFileReader.java:130) 
    at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1111) 
    at com.base.engine.core.Audio.initAudio(Audio.java:29) 
    at com.base.engine.core.Audio.<init>(Audio.java:18) 
    at com.base.engine.game.Game.init(Game.java:43) 
    at com.base.engine.core.Starter.init(Starter.java:19) 
    at com.base.engine.core.Starter.run(Starter.java:43) 
    at com.base.engine.core.Starter.start(Starter.java:27) 
    at com.base.engine.game.Main.main(Main.java:11) 

код

package com.base.engine.core; 


    import java.io.IOException; 

    import javax.sound.sampled.AudioInputStream; 
    import javax.sound.sampled.AudioSystem; 
    import javax.sound.sampled.Clip; 
    import javax.sound.sampled.LineUnavailableException; 
    import javax.sound.sampled.UnsupportedAudioFileException; 

    public class Audio { 

     private Clip clip; 
     private int fPos = 0; 

     public Audio(String filename){ 
      initAudio(filename); 
     } 

     private void initAudio(String filename){ 
      try { 
       clip = AudioSystem.getClip(); 
      } catch (LineUnavailableException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
       try { 
        AudioInputStream stream = AudioSystem.getAudioInputStream(Audio.class.getResourceAsStream("res/sounds/"+filename)); 
        clip.open(stream); 
       } catch (UnsupportedAudioFileException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (LineUnavailableException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

     } 

     public void play(){ 
      clip.setFramePosition(0); 
      clip.start(); 
      fPos = clip.getFramePosition(); 
     } 

     public void playAt(int pos){ 
      clip.setFramePosition(pos); 
      clip.start(); 
      fPos = clip.getFramePosition(); 
     } 

     public void continuePlay(){ 
      clip.setFramePosition(fPos); 
      clip.start(); 
      fPos = clip.getFramePosition(); 
     } 

     public void stop(){ 
      fPos = clip.getFramePosition(); 
      clip.stop(); 
     } 




    } 
+0

Я хотел бы проверить значение имени файла, убедиться, что он существует там, где это ожидалось (т. Е. У вас нет пути C: \). – scrappedcola

+0

Если 'res' находится в' src', попробуйте его с помощью косой черты, т.е. '/ res' –

+0

Ну, я проверил значение имени файла в режиме отладки, он говорит имя моего файла« sounds.wav », поэтому я Думаю, это так. – user3779657

ответ

0

Попробуйте это. Если File существует, то продолжайте идти дальше.

File f = new File("D:\\folder\\file.mp3"); 
System.out.print(f.exists()); 
+0

хорошо, как проверить имя моего жесткого диска, если я на debian linux? – user3779657

+0

linux вы можете использовать что-то вроде '/ user/folder/file.mp3' –

+0

ну не работает – user3779657

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