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()方法好像自己加了'/'
所以将音频文件的地址改在src文件下即可正常播放
参考一下的资料;
https://www.jianshu.com/p/be1de0bedddc
如果有不正确希望指出
以上是 java报错:Exception in thread "main" java.lang.NullPointerException 的全部内容, 来源链接: utcz.com/a/44727.html