zoukankan      html  css  js  c++  java
  • java.lang.NoClassDefFoundError: Could not initialize class异常处理

    借鉴:http://blog.csdn.net/sleepdancer/article/details/9207425
    static { InputStream in = XXX.class.getResourceAsStream("/conf/abc.properties"); try { prop.load(in); } catch (IOException e) { e.printStackTrace(); } }
    应用程序跑的时候,突然报出来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");

          } catch (IOException e) { 
                e.printStackTrace(); 
            } 

    注意:在Linux下用部分编辑器编辑文件有可能造成Java程序解析出错。如在web控制台项目中,一次在param.properties文件中添加一条记录,但由于使用记事本编辑器,造成加载工具类时报错不能初始化。
  • 相关阅读:
    简单介绍三层架构
    Java字符串常量池是什么?为什么要有这种常量池?
    java中String、StringBuffer和StringBuilder的区别(简单介绍)
    java中equals以及==的用法(简单介绍)
    关于java中Exception异常
    职场沟通,别光靠嘴
    小目标 | DAX高级实践-Power BI与Excel联合应用
    本号讯 | 微软和百度携手推进全球自动驾驶技术; 微软发布新一代可垂直可水平滚动的Arc鼠标
    你有一枚私人同声传译员待领取
    有了这套物联网节水平台,他决定回去继续管理农场
  • 原文地址:https://www.cnblogs.com/shz365/p/7088238.html
Copyright © 2011-2022 走看看