一、出现的问题
最近在修改之前别人写的代码的时候出现了一个 NoClassDefFoundError 的异常。出现报错的地方是自定义的工具类,调用了一个静态的方法。结果在系统运行的时候就出现找不到类定义的错误
public class OfficeView
static{
String officeHome = getOfficeHome();
logger.info("open office path NOT Found"+officeHome);
config = new DefaultOfficeManagerConfiguration();
config.setOfficeHome(officeHome);
officeManager = config.buildOfficeManager();
officeManager.start();
}
public static void converSWF(String filePath){
// 具体代码就不贴了
}
}
// 调用
OfficeView.converSWF(outPath);
在执行 OfficeView.converSWF(outPath); 的时候就出现了“未找到类定义错误
”,但是代码本身并没有问题,也就是说在代码编译期是没有错误的,而是在代码运行期间出的错误。代码出现错误是因为在static的静态块中初始化了一个引用的对象,而这个对象被没有没创建就被拿来使用了,所以导致这个对象没有“类定义成功”(反正我是这么理解的)。
二、解决方案
我的方案很简单,将static块中声明的所有内容全部放到构造方法中,然后将converSWF 的静态方法,转换成普通方法,通过对象的去调用,Ok ,问题得到解决,一大堆的理论可以参考https://blog.youkuaiyun.com/deniro_li/article/details/82018648。
public OfficeView() {
String officeHome = getOfficeHome();
logger.info("open office path NOT Found"+officeHome);
config = new DefaultOfficeManagerConfiguration();
config.setOfficeHome(officeHome);
officeManager = config.buildOfficeManager();
officeManager.start();
}