2

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

下面的代码用于调用索引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 的行中。为了克服这个问题,我做了两个实验:最初,被调用的方法与调用代码在同一个类中;第二次我创建了一个包含调用方法的嵌入类。结果是一样的。

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

4

1 回答 1

7

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

Class.forName("com.test.class.file.diretory.FinalTestDecoder");
于 2013-03-15T17:20:04.853 回答