java.lang.NoClassDefFoundError: Could not initialize class

来源:互联网 发布:淘宝店托管骗局 编辑:程序博客网 时间:2024/04/29 04:02

在寻找解决办法的时候,发现了这一篇:

http://www.cnblogs.com/kaka/archive/2013/04/03/2997325.html

应用程序跑的时候,突然报出来Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.xxx.xxx.XXX错误,当时第一反应就是.NoClassDefFoundError,肯定是类找不到了。于是赶紧看看代码,发现使用类的调用处没有任何的编译错误,这样的话就很迷惑了,为什么会NoClassDefFoundError错误呢。重新编译检查了一遍之后,还是报出来同样的错误,于是后面的错误信息引起了注意【Could not initialize】。

 

           不能初始化,也就是类在new的时候出现了问题,于是仔细检查了一下不能初始化的类,发现是个静态工具类,根本就没有什么构造函数,那么没有构造函数何来的初始化异常?于是仔细的检查了一下代码之后,发现异常可能出现在这个地方了。

关键就在第一行的 InputStream in = XXX.class.getResourceAsStream("/conf/abc.properties");,如果没有abc.properties的话,肯定会出现异常,这样的话就会造成了初始化错误。当然比较奇怪的时候,既然try了,为什么不把第一行的代码也放到try里面,这样的话,即使有错误,也会能够顺利的进行初始化操作。

后来博主应该发现是properties文件未能找到,那么java web里面如何找到也是个问题,下面是解决办法,用classLoader来解决:

//private static FileInputStreamfis=null;

private static InputStream is=null;

 

pp=new Properties();

                try {

                     //此句会找不到,有java.io.FileNotFoundException:

                     //fis=newFileInputStream("XXX.properties"); // 一般情况下默认读取为tomcat目录

                     //当我们使用java web的时候,读取文件要使用类加载器[因为类加载器去读取资源的时候,默认的主目录是src]

                is=SQLHelper.class.getClassLoader().getResourceAsStream("com/demo/util/XXX.properties");

                     pp.load(is);

                     dbDriver=pp.getProperty("dbDriver");

                     url=pp.getProperty("url");

                     username=pp.getProperty("username");

                     password=pp.getProperty("password");

原创粉丝点击