我正在写一个通用解释器。它包含原始过程(例如方法调用,从方法返回,控制语句等),这些原始过程由翻译程序运行,该翻译程序以任何语言编写并读取源代码并激活原语。该转换器的核心是由一个字符串数组构成的,该字符串数组包含实现过程和方法的动态激活的方法的名称。

以下代码用于调用索引procIndex指向的方法。它基于我发现的示例,并且与其他示例相同:

try {
    Class<?> c = Class.forName("FinalTestDecoder");
    Method  commandExe =
         c.getDeclaredMethod (commandsTable[commandIndex][methodName], (Class<?>[])null);
    commandExe.invoke (commandExe, (Object []) null);
} catch (IllegalAccessException| IllegalArgumentException|
       InvocationTargetException| EmptyStackException |
        ClassNotFoundException | NoSuchMethodException | SecurityException  e) {
  handleErr(cmdMethodNotFound, "Command: "+ commandsTable[commandIndex][programCommand]);
} finally {
   found = true;
}   // Cause the loop to terminate


handleErr方法正在处理错误情况,并获取十进制错误代码和字符串。错误处理程序可以由任何异常调用。

问题出在Class<?> c = Class.forName("FinalTestDecoder");行中,该行引发ClassNotFoundException。为了克服这个问题,我做了两个实验:最初,被调用的方法与调用代码在同一个类中;在第二个步骤中,我创建了一个包含调用方法的embedde类。结果是一样的。

好吧,我在这个问题上花了几个小时,没有想法。任何帮助都将受到欢迎

最佳答案

您必须使用完全限定的类名,这是方法所必需的。像这样的东西:

Class.forName("com.test.class.file.diretory.FinalTestDecoder");

关于java - 使用Class.forname时发生ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15438420/

10-12 04:57