use*_*174 3 java reflection jar invoke
我想收到结果动态调用另一个jar中的类.
例如,
名为A.jar的文件中的"A"目录.
名为B.jar的文件中的"B"目录.
我想动态调用一个A.jar文件类到B.jar文件.
这是A.jar文件的主要类.
因为消息交换技术,不考虑套接字和RMI.
主类(B.jar)
public class main {
public static void main(String[] args) {
//It dynamically creates an object of a Message Class in A.jar.
//And it invoke the getMessage function.
//And Save the return value.
}}
Run Code Online (Sandbox Code Playgroud)
消息类(A.jar)
public class message{
public String getMessage(){
return "Hello!";
}
}
Run Code Online (Sandbox Code Playgroud)
首先,您需要动态创建给定类的实例:
Class<?> clazz = Class.forName("message");
Object messageObj = clazz.newInstance();
Run Code Online (Sandbox Code Playgroud)
这假定.jar包含message该类的文件classpath位于Java运行库上,以便Java运行库能够找到它.否则,您需要通过类加载器手动加载jar文件,例如,如何在运行时动态加载Jars?.假设您的A.jar文件包含message该类c:\temp\A.jar,您可以使用类似的东西
URLClassLoader child = new URLClassLoader (
new URL[] {new URL("file:///c:/temp/A.jar")}, main.class.getClassLoader());
Class<?> clazz = Class.forName("message", true, child);
Run Code Online (Sandbox Code Playgroud)
加载jar文件并从中加载消息类.
在这两种情况下,您都可以从类中检索该方法并在创建的实例上调用它:
Method getMessage = clazz.getMethod("getMessage");
String result = (String) getMessage.invoke(messageObj);
Run Code Online (Sandbox Code Playgroud)