gpt4 book ai didi

java - 在 Java 运行时尝试从 jar 文件加载类时出现 ClassNotFoundException

转载 作者:行者123 更新时间:2023-11-30 05:58:07 28 4
gpt4 key购买 nike

我正在尝试动态执行 jar 文件中的类中的函数。我有 jar 文件的位置、类的名称和其中的函数作为字符串。

我查看了这些问题,但没有一个答案对我有用:

How should I load Jars dynamically at runtime?

ClassNotFoundException while trying to load class from external JAR at runtime

How to load a jar file at runtime

Dynamically load a jar

Load jar dynamically at runtime?

这是我到目前为止所得到的:在主程序中:

    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)

你能告诉我我做错了什么吗?预先感谢您。

最佳答案

解决方案是您还必须声明软件包。

如果您更新存储类名的变量 lcStr 以包含该包,它应该可以工作。

示例:

        String lcStr = "com.company.Main1";

关于java - 在 Java 运行时尝试从 jar 文件加载类时出现 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52801202/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com