我的IDEA版本是2019
遇到问题后,在网上查了很多方法都没用,最后和同学讨论终于把问题解决了
很明显,报错是流空指针异常,首先想到了问题可能出在没能成功读取配置文件
可能错误一:配置文件放的位置不对
我现在没有使用Maven。网上的一种解决方法说,应该放在Main中resources里对我来说是不对的,因为没有这个文件夹
正确位置是src下
可能错误二:读取配置文件的代码“失效了”
// 法一 InputStream is= ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties"); //法二 InputStream is= addServlet.class.getClassLoader().getResourceAsStream("druid.properties");
一开始我采用的是法一读取配置文件,这种方法在普通的java文件中是有效的,能够正常读取配置文件,所以在我测试BUG的时候,一直没有怀疑是这段代码带来的问题
后来同学通过debug发现,当他使用法一的代码,同样会出现无法读取的问题(本来他自己的程序采用的是法二),至此,真相大白
原因:Tomcat的类加载器与JVM自带类加载器不同
Tomcat有自己自定义的类加载器,使用法一
ClassLoader.getSystemClassLoader()
使用的是Tomcat的类加载器,导致无法读到src里的配置文件
addServlet.class.getClassLoader().
使用类名.class.getClassLoader()方法,则使用的是此类的类加载器,也就是jvm的系统类加载器,
能正确读到配置文件
这里只是大概讲一下原因,详细请了解反射以及类加载器的相关知识
非常感谢大佬同学帮忙解决这个BUG