Java 从特定文件夹动态加载类
我需要根据输入动态加载java程序。所有java类文件都放在以下文件夹中:C://Users/me/workspace/File/bin/Encrypt/。 此文件夹中有3个类文件:Class1.class、Class2.class、Class3.class 要在运行时提取它们,我使用以下代码:Java 从特定文件夹动态加载类,java,jakarta-ee,Java,Jakarta Ee,我需要根据输入动态加载java程序。所有java类文件都放在以下文件夹中:C://Users/me/workspace/File/bin/Encrypt/。 此文件夹中有3个类文件:Class1.class、Class2.class、Class3.class 要在运行时提取它们,我使用以下代码: package First; import java.io.File; import java.net.MalformedURLException; import java.net.U
package First;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
public class Main
{
public static void main(String[] args) {
// Say Class.class is the input file to be picked up.
String abc = "Class1.class";
try {
File file = new File("C:\\Users\\me\\workspace\\File\\bin\\Encrypt");
//convert the file to URL format
URL url = file.toURI().toURL();
URL[] urls = new URL[]{url};
//load this folder into Class loader
ClassLoader cl = new URLClassLoader(urls);
Class cls = cl.loadClass(abc);
System.out.println("cls.getName() = " + cls.getName());
cls.encrypt();
}
catch ( ClassNotFoundException | MalformedURLException e) {
e.printStackTrace();
}
}
}
我在这里面临以下问题:
上面的代码显示了错误:.NoClassDefFoundError:Class1??
在路径中使用了所有类型的-/,\,/,\。
如何调用Class1文件中的方法sum??
既然您有…\bin\Encrypt是您的类所在的文件夹,我敢打赌您的类的包是Encrypt。在这种情况下,abc应该是
String abc = "Enrcypt.Class1";
如果类在默认包中,这意味着它们没有包声明,则使用
String abc = "Class1";
还要注意,类的名称中不需要扩展名.class
要调用以这种方式加载的类的方法,您应该参考
首先使用
然后使用该方法对象的方法调用函数。如果要调用的方法不是静态的,则需要提供动态加载的类的实例,如果是静态的,则只需传递null。Google Java反射API此问题与javascript无关。正当