【问题标题】:Error when invoking method - java.lang.RuntimeException: Uncompilable source code - Erroneous tree type: <any>调用方法时出错 - java.lang.RuntimeException:无法编译的源代码 - 错误的树类型:<any>
【发布时间】: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


【解决方案1】:

从您发布的代码来看,您似乎使用了错误的字符“,看起来很像",但它们并不相同。修复它,重新编译代码,然后重试。

【讨论】:

    猜你喜欢
    • 2015-07-07
    • 2013-12-08
    • 2021-02-21
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    相关资源
    最近更新 更多