- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 .jar 文件,名为 Plugin.jar
其中包含一个类,plugin.Plugin
, 使用方法 public ArrayList<String> getList()
.
我试图从我的主程序调用该方法,这是一个完全不同的 NetBeans 项目。
但是,我得到一个 java.lang.IllegalArgumentException: object is not an instance of declaring class
在 catch
之前的最后一行条款。
主程序(在另一个 .jar 中调用 getList()
的程序)如下所示:
public class PluginMain {
public static void main(String[] args) {
try {
File file = new File("plugins/Plugin.jar");
URL url = file.toURI().toURL();
URL[] urls = new URL[]{url};
ClassLoader cl = new URLClassLoader(urls);
Class cls = cl.loadClass("plugin.Plugin");
Method method = cls.getDeclaredMethod("getList");
ArrayList<String> invoke = (ArrayList<String>) method.invoke(cls);
} catch (MalformedURLException | ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
Logger.getLogger(PluginMain.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
plugin.Plugin
来自 Plugin.jar
的类(class)看起来像这样:
public class Plugin {
public Plugin() {
}
public ArrayList<String> getList(){
ArrayList<String> list = new ArrayList();
list.add("String1");
list.add("String2");
list.add("String3");
return list;
}
}
这是我第一次尝试这样的事情,我真的很迷茫,不知道应该怎么做才能修复异常。任何帮助将不胜感激。
最佳答案
Method#invoke(Object, Object...)
方法需要该方法所属的类的实例。
你有几个带有反射的选择。如果你的类有一个无参数的构造函数(就像它那样),你可以使用
Object instance = cls.newInstance();
然后传递给它
ArrayList<String> invoke = (ArrayList<String>) method.invoke(instance);
如果您的类没有无参数构造函数,您需要从可用的构造函数中进行选择
Constructor[] constructors = cls.getConstructors();
I am trying to call that method from my main program, which is a completely different NetBeans project.
请注意,只要类文件在类路径上,您就可以做很多事情
Plugin plugin = new Plugin();
...
它在不同项目中的事实与您如何运行 java
程序无关。
关于java - 如何从另一个 .jar 中的类调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19103085/
我是一名优秀的程序员,十分优秀!