说说Java的一个坑,坑了我3小时waste my life
好的,首先说一下问题是解决了,但是我并没搞懂机制,希望有经验的大佬给个更正确的解决方案。
今天学到MySQL的工具类,然后我开始抽取其中的工具类,写了个自己的工具类,并配置了一个jdbc.properties的配置文件
贴个代码先
/**
* 文件的读取,只需要读取一次即可拿到这些值,使用静态代码块
*/
static{
// 读取资源文件,获取值
try {
// 1.创建Properties集合类
Properties pro = new Properties();
// 获取src路径下的文件的方式--->ClassLoader 类加载器
// 2.加载配置文件
pro.load(new FileReader(ClassLoader.getSystemResource("jdbc.properties").getPath()));
// 3.获取属性,赋值
url = pro.getProperty("Url");
user = pro.getProperty("User");
password = pro.getProperty("PassWord");
driver = pro.getProperty("Driver");
// 4.注册驱动
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
上面设置的是一些静态成员变量,下面是各个资源的释放。
好的,开始说问题,这个工具类写好了之后,第一次运行,OK,没报错。
可以给我返回MySQL里的数据,我创建了个自定义类存储这些数据。然后用ArrayList集合存储并打印输出这些数据。么得问题。
下面给出数据返回,
Emp{id=1012, ename='孙悟空', job_id=4, mgr=1004, joindate=2000-12-12, salary=8000.0, bonus=4000.0, dept_id=20}
Emp{id=1013, ename='林冲', job_id=3, mgr=1006, joindate=2001-02-12, salary=16000.0, bonus=3000.0, dept_id=30}
Emp{id=1014, ename='张三丰', job_id=4, mgr=1006, joindate=2001-12-22, salary=12500.0, bonus=5000.0, dept_id=10}
13
Process finished with exit code 0
一共13组,取了下面几组数据
这里没问题,接下来我要做另一个练习,我就去配置文件中修改了数据库的位置。
然后我写完代码开始运行程序之后,他给我抛了个这个异常
java.lang.NoClassDefFoundError: Could not initialize class
这个异常第一次见,跟这个
ClassNotFoundException
有点像,然后我拖着这个异常去百度,去bing,发现他们的错误太高端,我还看不懂。
看到了个教程是说是编译期找得到文件,但是运行期间文件找不到了,这就难到我了。
然后我就尝试了以下操作
1. 修改path
2. 重写jdbc.properties文件
3. 修改了类加载器(之前的类加载器不是上面那样写的,也是我在论坛看到的这样写的方式)
4. 各种删除,重写。
5. 重启服务器
6. 最后连重启大法都试了....
么得用,然后突然灵机一动,他说运行时找不到,我同包下,你总找的到把。我就把这个工具类直接不导包,直接拖入那个练习类的包里面。
然后就好了。。
对,就这样就好了。
好了,水了这么久做个总结
你自己写的工具类什么的,要是写完用的好好的,突然有一天崩了,就直接拖入需要运行的类的同包下,
最后,这是我的个人情况。如果你们没法解决,参考下这个就行。