java - 对象不是使用 java 反射声明类的实例
问题描述
我正在尝试使用 java 反射和 classLoader 从 URL 加载一个类。该应用程序部署在 weblogic 12c 服务器上
File f = new File("/a/abc");
URL url = f.toURI().toURL();
ClassLoader classLoader = ClassLoader.getSystemClassLoader();
Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
method.setAccessible(true);
method.invoke(classLoader, url);
Class jobClass = classLoader.loadClass("com.test.abc");
但是,我收到以下错误:
抛出异常:
java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
请让我知道这里可能是什么问题,或者这不是正确的方法。
解决方案
您正在对 ClassLoader 类型的类调用方法“addURL”。ClassLoader 类不包含成员方法“addURL”。这就是你得到错误的原因。
相反,您应该使用 URLClassLoader 类型的对象调用方法的“调用”方法。
推荐阅读
- php - HTML AJAX 不执行 PHP
- reactjs - 如何隐藏按钮,仅当 React 的输入标签中有值时
- sql - 将 PagingAndSortingRepository.findAll(Pageable pageable) 与未排序的可分页一起使用是否可靠?
- php - 如何将 php 文件中的 Json 数据解码为另一个 php 文件?
- matlab - 在 Matlab 中:从 Alpha-stable pdf 生成随机数,它会在时间上消耗(在循环中)
- r - 谁能指导如何从起点开始日期?我想以一年的差距绘制从 2003 年到 2016 年的日期
- c# - 如何自定义格式的文本框输入?
- php - LRAVEL 使用未定义的常量问题 - 控制器中假设的“问题”
- ios - 使用 xcodebuild 归档时缺少配置文件错误
- python - 经验洗牌检查python