java报错:Exception in thread "main" java.lang.NullPointerException

今天,写一个添加背景音乐的方法时,在导入当前文件夹下的音乐时中始终出现,以下的异常,

Exception in thread "main" java.lang.NullPointerException

文件存储位置

存放在当前的modlue目录下,格式为wav.

源代码

        private void playBGM(){

try {

//创建了一个播放器;

Clip bgm= AudioSystem.getClip();

System.out.println(this.getClass().getClassLoader());

InputStream is=this.getClass().getClassLoader().getResourceAsStream("bgm.wav");

//ClassLoader()类加载器,找到类,在找到类的加载器在加载;

AudioInputStream ais=AudioSystem.getAudioInputStream(is);

bgm.open((ais));//打开音频;

bgm.start();

} catch (LineUnavailableException e) {

e.printStackTrace();

} catch (UnsupportedAudioFileException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

主要是在获取音频流对象时,始终获取到的是NULL

  InputStream is=this.getClass().getClassLoader().getResourceAsStream("bgm.wav");

这是什么问题?,是文件存储位置不正确吗,上面的获取文件方法,应该是以当前目录为根目录向下寻找吧

回答

这,你找路径找到对应的路径,然后以流的方式读进去就好了,现在报了空指针的错误,你可以选择断点进去查看

解决了查阅资料得到了

Class.getResourceAsStream(String path) : path 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下(即'/'代表src)获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源.

在翻阅源码时:toPackageName()方法好像自己加了'/'

image.png

所以将音频文件的地址改在src文件下即可正常播放

参考一下的资料;

https://www.jianshu.com/p/be1de0bedddc

如果有不正确希望指出

以上是 java报错:Exception in thread "main" java.lang.NullPointerException 的全部内容, 来源链接: utcz.com/a/44727.html

回到顶部