Я пытаюсь открыть аудиофайлы, но он не работает. Я не знаю, была ли это ОС или что-то еще, но когда я был в 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();
}
}
Я хотел бы проверить значение имени файла, убедиться, что он существует там, где это ожидалось (т. Е. У вас нет пути C: \). – scrappedcola
Если 'res' находится в' src', попробуйте его с помощью косой черты, т.е. '/ res' –
Ну, я проверил значение имени файла в режиме отладки, он говорит имя моего файла« sounds.wav », поэтому я Думаю, это так. – user3779657