在我的AndroidStudio项目中,我想使用一个JAR库,它使用反射机制动态加载一个类并运行它的方法。
但是,它无法加载课程而我获得@Entity
@Table(name = "Users")
public class User {
@Id
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
private int UserId;
private String alias;
private String email;
@OneToOne(fetch = FetchType.LAZY)
private Person person;
@OneToMany
private List<Role> roles;
public User() {
}
// constructor, getters, setters...
}
。
当我尝试从活动中加载类时 - 它可以工作。 它只在系统尝试从库中加载类时失败。 更重要的是,库无法加载与库一起使用的类,从而导致相同的错误。 此外,我无法从库中加载类,甚至从活动中加载。 该类加载如下:
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("jcrdb");
em = entityManagerFactory.createEntityManager();
抛出的异常如下所示:
ClassNotFoundException
答案 0 :(得分:1)
getSystemClassLoader
。
代替:
Class<?> actionClass = Class.forName(className,true,ClassLoader.getSystemClassLoader());
我用过
Class<?> actionClass = Class.forName(className);
它有效。 但是,我仍然不能完全清楚为什么这两种方法都适用于桌面环境,只有第二种方法适用于Android。
答案 1 :(得分:0)
很明显,原因是您使用的jar ClassLoader
不包含要加载的类。因此,要解决此问题,您必须调用您的应用ClassLoader
。