Java 如何使用类加载器加载类

Java 如何使用类加载器加载类,java,classloader,Java,Classloader,我有一个名为Operator的接口,这个接口的目录是d:\operators 接口定义如下: package operators; public interface Operator { double calculate(double firstNumber,double secondNumber); String getSign(); } 在主程序(d:\ProjectFile94.6.7\main)中,我希望加载此接口并使用它。我加载接口如下: String rootPa

我有一个名为Operator的接口,这个接口的目录是d:\operators 接口定义如下:

package operators;

public interface Operator
{
    double calculate(double firstNumber,double secondNumber);
    String getSign();
}
在主程序(d:\ProjectFile94.6.7\main)中,我希望加载此接口并使用它。我加载接口如下:

String rootPath = System.getProperty("user.dir")+System.getProperty("file.separator");
            String operatorsPath = rootPath.replace("ProjectFile94.6.7" , "").replace("main" , "") + "operators";
System.out.println(operatorsPath);

//Load operators from another file
File operatorFile = new File(operatorsPath);
URL operatorFilePath = operatorFile.toURL();          
URL[] operatorFilePaths = new URL[]{operatorFilePath};
ClassLoader operatorsLoader = new URLClassLoader(operatorFilePaths);
Class operatorInterface = operatorsLoader.loadClass("operators.Operator");
应用程序编译得很好,但在运行时我遇到了以下异常:

java.lang.ClassNotFoundException:operators.Operator


不能在类路径目录中追加包名:

String operatorsPath = rootPath.replace("ProjectFile94.6.7" , "").replace("main" , "");

i、 e.目录路径应为
D://
。否则,您只是告诉类加载器搜索
D:/operators/operators/Operator.class

您不能在类路径目录中追加包名:

String operatorsPath = rootPath.replace("ProjectFile94.6.7" , "").replace("main" , "");

i、 e.目录路径应为
D://
。否则,您只是告诉类加载器搜索
D:/operators/operators/Operator.class

已编译的类运算符。运算符必须位于类路径上(在运行时,而不仅仅是编译时)。如果您从命令行运行,请阅读-cp选项运算符位于d:\operators中,我的主程序位于d:\ProjectFile94.6.7\main中。如何将它们置于相同的类路径中?我使用命令行编译类运算符。运算符必须位于类路径上(在运行时,而不仅仅是编译时)。如果您从命令行运行,请阅读关于-cp选项operators在d:\operators中,我的主程序在d:\ProjectFile94.6.7\main中。如何将它们放在同一类路径中?我使用命令行我知道这一点,但我不知道如何解决它我的operators文件夹在d:\operators中,我的主程序在ProjectFile94.6.7\main中。在OperatorPath中变量我应该有d:\运算符,我不知道怎么做,你能帮我吗?@marzie,我刚刚回答了如何解决它。只是不要在末尾附加
操作符
部分,这样类加载器就可以在正确的目录中查找(在本例中是目录
D:///code>)。不,我应该删除这个部分:replace(“ProjectFile94.6.7”,”).replace(“main”,”)以及为什么要执行所有这些类加载操作?你不能在命令行上引用这个类吗?像
java-cpd:/;D:/ProjectFile94.6.7 main.MainClass
。我应该加载运算符(+、*、/、-)从另一个文件夹中我知道这一点,但我不知道如何解决它我的operators文件夹在d:\operators中,我的主程序在ProjectFile94.6.7\main中。在OperatorPath变量中我应该只有d:\operators我不知道如何解决它。你能帮我吗?@marzie我刚刚回答了如何解决它。只是不要在末尾附加
操作符
部分,这样类加载器就可以在正确的目录中查找(在本例中是目录
D:///code>)。不,我应该删除这个部分:replace(“ProjectFile94.6.7”,”).replace(“main”,”)以及为什么要执行所有这些类加载操作?你不能在命令行上引用这个类吗?像
java-cpd:/;D:/ProjectFile94.6.7 main.MainClass
。我应该从另一个文件夹加载运算符(+、*、/、-)