2012-06-12 7 views
0

У меня возникает ошибка при воспроизведении звука. По какой-то причине я получаю исключение из-за нулевого указателя. Место и файл я использую как exsist, так и при выводе строки файла я получаю правильный путь к файлу. Нулевой указатель находится на линии .open. Что я делаю не так?NullPointer при воспроизведении звука на Java

package main; 

import java.io.File; 
import java.io.IOException; 
import java.net.URL; 

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

public class Sound { 
    Clip background; 

    public void init() { 

    try { 
     String file = new File("").getAbsolutePath() + "\\Sounds\\Pacman_Opening.wav"; 
     System.out.println(file); 
     background = AudioSystem.getClip(); 
     background.open(AudioSystem.getAudioInputStream(getClass().getResource(file))); 
    } catch (LineUnavailableException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (UnsupportedAudioFileException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    } 

    public void playBG() { 
     background.start(); 
    } 
    public void stopBG() { 
     background.stop(); 
    } 
    public static void main(String[] args) { 
     Sound s = new Sound(); 
     s.init(); 
     s.playBG(); 
    } 

} 

Это ошибка (первая строка является расположение):

Exception in thread "main" java.lang.NullPointerException 
    at com.sun.media.sound.WaveFileReader.getAudioInputStream(Unknown Source) 
    at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source) 
    at main.Sound.init(Sound.java:21) 
    at main.Sound.main(Sound.java:42) 
+0

Я отредактировал ваше название для вас - не стесняйтесь улучшать его дальше. – Widor

+1

Вы пошли темным путем. «wy das tis no wok» был бы лучше. – Frankie

+0

@Widor Мой плохой, забыл изменить этот титул, это было просто название temp, просто пропустил его изменение. Какая ужасная ошибка, спасибо за ее исправление! – ComputerLocus

ответ

4

Class.getResource() не принимает файла - это занимает ресурс имя.

Почему бы вам просто не создать File и передать это getAudioInputStream?

// TODO: Avoid backslashes in file constructor calls; there are other ways 
// of creating relative paths 
File file = new File("Sounds\\Pacman_Opening.wav"); 
... 
background.open(AudioSystem.getAudioInputStream(file)); 
+0

Спасибо, кажется, работает на меня. Когда было бы идеально использовать getAbsolutePath()? – ComputerLocus

+0

@Fogest: Когда вам нужен абсолютный путь по какой-то причине. Если вы * отдадите * 'File' относительный путь, он создаст один относительный к текущему рабочему каталогу, который все, что вам нужно, кажется ... –

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