◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
ClassNotFoundException 错误的奇怪现象
问: java 程序抛出 java.lang.ClassNotFoundException 错误,重启程序后却消失。这是何故?
答:
这种情况可能是由于 jar 文件释放的位置被操作系统(例如 CentOS)清理导致的。
立即学习“Java免费学习笔记(深入)”;
在 Java 中,使用 Class.forName() 加载类时,会根据类路径查找指定的类。如果类文件不存在于类路径中,就会抛出 ClassNotFoundException 错误。
在上述案例中,com.vcanbuy.web.excel.model.NoOrderCustomersExcel 类在 jar 文件中,但 jar 文件释放的位置是临时文件夹。当 CentOS 清理临时文件夹时,jar 文件也会被清除,导致后续 Class.forName() 加载时找不到该类文件,从而引发 ClassNotFoundException 错误。
重启程序会刷新内存,重新加载 jar 文件,从而解决ClassNotFoundException 错误。但如果没有持久化 jar 文件的位置,此问题可能会再次出现。
解决方案:
为了避免这种情况,可以将 jar 文件释放到持久化位置,例如服务器的 lib 文件夹。这样,即使临时文件夹被清理,类文件仍然可以被加载。
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。