Java 如何解决IllegalArgumentException?

Java 如何解决IllegalArgumentException?,java,Java,我有一个应用程序,它使用类加载器和反射来加载和调用方法。在运行时,我收到以下异常:java.lang.IllegalArgumentException:对象不是声明类的实例。这是我的密码: File operatorFile = new File(OperatorsPath); URL operatorFilePath = operatorFile.toURL(); URL[] operatorFilePaths = new URL[]{operatorFilePath};

我有一个应用程序,它使用类加载器和反射来加载和调用方法。在运行时,我收到以下异常:java.lang.IllegalArgumentException:对象不是声明类的实例。这是我的密码:

File operatorFile = new File(OperatorsPath);
URL operatorFilePath = operatorFile.toURL();          
URL[] operatorFilePaths = new URL[]{operatorFilePath};
ClassLoader operatorsLoader = new URLClassLoader(operatorFilePaths);


Class operatorInterface = operatorsLoader.loadClass("Operator"); 

FilenameFilter filterDotClass = new FilenameFilter() 
{ 
    public boolean accept(File dir, String name) 
    { 
        return name.endsWith(".class"); 
    } 
};
File[] operatorFiles = new File(OperatorsPath).listFiles(filterDotClass); 
Class[] operatorClass = new Class[operatorFiles.length-1]; 
int index = 0;
Method methodsInOperator;
Object instance;
String operatorSign;
Map<String , Object> operatorMap = new HashMap<String , Object>();

for (File oprFile : operatorFiles)
{
    String filename = oprFile.getName(); 
        //String filename = "operators."+oprFile.getName(); 
        filename = filename.substring(0, filename.length() - 6); 
        Class currentClass = operatorsLoader.loadClass(filename); 

        if (!filename.equalsIgnoreCase("operator") && operatorInterface.isAssignableFrom(currentClass)) 
        {
            operatorClass[index] = currentClass;
            instance = currentClass.newInstance();
            methodsInOperator = currentClass.getMethod("getSign", null); 
            operatorSign = (String)methodsInOperator.invoke(instance, null);
            operatorMap.put(operatorSign,instance);
            ++index; 
        } 
}

while(expression != null)
{
    String[] elementInExpression = expression.split(",");

    if(elementInExpression.length != 3)
    {
        System.out.println("Expression should have two operand and 1 operator ");
        throw new ValidationException("Validation on number of element failed1");
    }

    Validation.validateOperand(elementInExpression[0],elementInExpression[1]);
    Validation.validateOperator(elementInExpression[2]);

    double firstNumber = Double.parseDouble(elementInExpression[0]);
    double secondNumber = Double.parseDouble(elementInExpression[1]);

    double output = 0;
    Object obj;

    for(Class operatorCls : operatorClass)
    {
        obj = (Object)operatorMap.get(elementInExpression[2]);
        methodsInOperator = operatorCls.getMethod("calculate", new Class[] { double.class, double.class } ); 
        output =(double)methodsInOperator.invoke(obj, firstNumber, secondNumber);
    }
    processingResult.add(output);
    expression = mathExpReader.readLine();

}
readerWriter.writeFile(path,processingResult); 

有人能帮我吗?

哪行抛出错误?output=doublemethodsInOperator.invokeobj,firstNumber,secondNumber;所以对象不是声明类的实例。。。。六羟甲基三聚氰胺六甲醚。。。。也许obj不是MethodsOperator引用的方法类的对象。我知道,但我不知道为什么在这部分抛出这个异常:if!filename.equalsIgnoreCaseoperator&&operatorInterface.isAssignableFromcurrentClass{operatorClass[index]=currentClass;instance=currentClass.newInstance;operatorMap.putoperatorSign,instance;++index;}我为evrey loaded Cals创建了一个实例,并根据键将其存储在一个映射中。我检索了这个实例并调用了该方法,但我不知道为什么不工作异常并不奇怪,因为for循环使用方法CalculatedDouble、double迭代多个类,但对于所有迭代,obj都是相同的,因为它在循环中被分配了相同的值。