使用Class.forname时发生ClassNotFoundException - java

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

以下代码用于调用索引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:静态字段在内存中的哪个位置? - java

如果我们将对象存储在对象的静态字段中,那么JVM如何为它分配内存?它是否存在于“隐式”(不确定我是否使用正确的单词)类对象中?静态字段与对象字段有何不同? 参考方案 静态字段是类变量,并且在该类的所有实例之间共享。实例变量(或我认为您引用它们的对象字段)属于类的各个实例,并且不共享。至于它们存储在内存中的位置将根据JVM的实现而定,因此没有理由需要两个不同的…

Java-非泛型类扩展了泛型类 - java

我想知道如何(如果可能)创建一个类,它是泛型类的特定类型。具体来说,我有一个实现所有必需方法的abstract class Stack<Type>,我想有一个class StackInteger,而StackInteger的实例也是Stack<Integer>的实例。我看到我可以做这样的事情:class StackInteger { …

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

Java:我可以在Hashmaps中使用数组吗? - java

我可以在Hashmaps中使用数组吗?如果是这样,则声明这种哈希图的确切语法是什么?谢谢 参考方案 数组也是对象。甚至像int[]这样的原始数组。Map<String,String[]> map = new HashMap<String,String[]>();