Я пытаюсь динамически выполнить функцию из класса в файле jar.У меня есть местоположение файла jar, имя класса и функции в нем в виде строк.
Я посмотрел на эти вопросы, но ни один из ответов не сработал для меня:
Как динамически загружать JAR во время выполнения?
ClassNotFoundException при попытке загрузить класс из внешнего JAR во время выполнения
Как загрузитьфайл jar во время выполнения
динамически загружать jar
динамически загружать jar во время выполнения?
Вот чтоУ меня так далеко: В основной программе:
public class Main
{
public static void main(String[] args)
{
File file = new File("E:\\DeSKtop\\hw.jar");
String lcStr = "Main1";
URL jarfile;
try {
jarfile = new URL("jar", "","file:" + file.getAbsolutePath()+"!/");
URLClassLoader cl = URLClassLoader.newInstance(new URL[] {jarfile });
Class loadedClass = cl.loadClass(lcStr);
Method method = loadedClass.getDeclaredMethod("returnHW");
Object instance = loadedClass.newInstance();
Object result = method.invoke(instance);
//System.out.println(method.invoke());
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//System.out.println(loadLibrary(myJar));
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
В файл JAR я пытаюсь загрузить:
public class Main1 {
public static void main(String[] args)
{
}
public static String returnHW()
{
System.out.println("HlloWOrld");;
return "Hello Wrld!";
}
}
Когда я пытаюсь запустить основную программу, яполучите это:
java.lang.ClassNotFoundException: Main1
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.net.FactoryURLClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at Main.main(Main.java:22)
Можете ли вы сказать мне, что я делаю неправильно?Заранее спасибо.