使用Class.forname时ClassNotFoundException

时间:2013-03-15 17:18:12

标签: java arrays class methods

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

以下代码用于调用索引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类。结果是一样的。

好吧,我花了好几个小时才解决这个问题并且没有想法。谢天谢地欢迎任何帮助

1 个答案:

答案 0 :(得分:7)

您必须使用方法forName所需的完全限定类名。这样的事情: -

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