java - 即使类已放入类路径目录中,也会重复 ClassNotFoundException

标签 java classpath classloader

我知道类在 Java 代码中首次使用时会加载。我在运行 java 代码期间传递了一个类路径。

流程是:类>>主>>新线程>>调用类构造函数>>线程运行>尝试创建不存在类的对象>>捕获ClassNotFoundException>>手动将不存在类放入类路径中>> 再次尝试创建该不存在类的对象 >> 仍然抛出 ClassNotFoundException

一旦发生 ClassNotFoundException,我将所需的 .class 文件放在类路径目录中,并且不想重新启动我的程序。发生 ClassNotFoundException 后,当我从 Main 启动新线程并遵循流程时,它工作正常。但当我使用同一个线程时,效果不佳。

如何让我的程序在运行时重新获取类路径类文件?

最佳答案

每个线程都有自己的类加载器,可以使用 Thread.currentThread().getContextClassLoader() 访问该类加载器。由于第一个线程的类加载器中没有该类,因此会引发 ClassNotFoundException。即使您手动将所需的 .class 文件复制到类路径目录中,线程也不会意识到这一点。这是因为除非重新启动程序或创建新线程,否则不会重新加载类。

您提到过:

Catch ClassNotFoundException >> Put non-existing class in classpath manually

捕获 ClassNotFoundException 后,是否让当前线程进入 hibernate 状态,直到复制丢失的 .class 文件?你是如何处理这个问题的?

关于java - 即使类已放入类路径目录中,也会重复 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39586505/

相关文章:

java - 使用Docker在本地设置微服务

Java类加载器

java - 在 JBoss 4.0.2 war 部署中找不到 WEB-INF/lib jar

java - 如何在 JBoss 5.x 上使用 JPA2? (或如何消除类加载隔离问题?)

java - 如何使用 Spring 存储库在 LDAP 中绑定(bind)多值属性

java - Java中的多线程最佳实践

java - Hibernate 在 IDE 上向我抛出 "FROM unexpected"和未经检查的分配

linux - 如何配置grails类路径以添加 "src/groovy"文件夹(在Linux环境中)?

java - SLF4J - 绑定(bind)被同一应用程序服务器上的其他应用程序覆盖

java - Jar 位于类路径中但拒绝工作