【发布时间】:2015-06-20 04:20:40
【问题描述】:
我一直在从事我在this question 中描述的一个项目,我之前问过这个项目。我试图从一个动态生成的类中调用一个方法(以及在程序运行时编译的类)。我在方法loadWatchFace() 中调用Class watchFace = Class.forName("pebbleos.PebbleOS_" + fileName);,后跟currentWatchFace = watchFace.newInstance();,然后在方法runWatchFace() 中尝试使用以下方法调用该方法:
Method method = null;
try {
method = currentWatchFace.getClass().getMethod("initializeFace");
} catch (SecurityException | NoSuchMethodException e) {
System.out.println("Error");
}
method.invoke(currentWatchFace);
我的表盘代码是从一个文本文件中获取的,如下所示:
package pebbleos;
public class PebbleOS_Default {
public PebbleOS_Default () {
}
public void initializeFace() {
System.out.println(“Hello World”);
}
}
只是一个简短的说明,上面应该是这个错误的“原因”:java.lang.reflect.InvocationTargetException
【问题讨论】:
-
使用
e.printStackTrace()而不是你天真的System.out.println("Error")来检查异常的详细信息 并对该主题进行相关搜索。 -
该部分(认为您肯定是正确的)目前无关紧要,因为该部分代码没有被调用,即该方法显然正在正确初始化。
-
将该代码包装到另一个
try-catch语句中并使用e.printStackTrace()获取异常的正确详细信息。您可以根据异常提供的详细信息来评估异常,而不仅仅是根据其类型。 -
所以错误肯定在
method.invoke(currentWatchFace)这个语句中,也就是说文件第10行的源代码不可编译,即System.out.println("Hello World");。 -
不完全确定,但您使用的是
“,而"在System.out.println(“Hello World“);中应该是"(检查双引号的区别)。
标签: java