我会尽力表达这一点。我有一个具有类似API功能的程序-它使用反射从类中动态调用方法。在这种情况下:
Server.java
public static void main(String[] args) {
Class<?> clazz = Class.forName("DiHandler");
StHandler out = (StHandler) clazz.newInstance();
out.read();
}
DiHandler.java
// implements StHandler
import edu.ds.*;
public void read() {
Ds aType = new Ds();
aType = "134";
}
因此DiHandler有一个方法read()可以包含任何内容,在编译后对Server.java来说无关紧要。
我的问题是:DiHandler.java使用JAR文件中的类Ds。当我在Eclipse中处理DiHandler.java时(与项目Server.java处于另一个项目中),我可以毫无问题地添加此JAR。但是,当我将DiHandler.class编译后移动到供Server.class使用时,它如何仍使用JAR文件?
我希望这是有道理的,我想这是另一种表达方式,那就是我如何允许DiHandler在不编辑类路径的情况下从JAR调用类?
在此先多谢,对于任何混乱或措辞不当,深表歉意,我只能提供感谢和按照惯例提供一品脱的帮助。
中号
最佳答案
一种或另一种方式,您需要让加载DiHandler
的ClassLoader知道如何加载Ds
类。最简单的方法是通过类路径。
另一种方法是提供您自己的ClassLoader,用于加载DiHandler
,而该ClassLoader知道如何加载Ds
。这可能是URLClassLoader
的子类,它允许您动态将URL添加到JAR文件中。由于我不知道您所处环境的细节,我无法说出实际情况。