static public void printInfo(String str)你的java方法是static的,应该使用GetStaticMethodID来获取方法的ID

解决方案 »

  1.   

    还是不行,报java.lang.IncompatibleClassChangeError错误。:(
      

  2.   

    这一次是这一行报错:
    env->CallVoidMethod(obj, mid, env->NewStringUTF("Hello world!"));
    这一行有什么错误吗?
      

  3.   

    把你调用
    native static public void invokeJavaMethod();
    这个函数的代码贴出来看看,OK?
      

  4.   

    呵呵,原来如此
    改成CallStaticVoildMethod试试看
      

  5.   

    我对我的愚笨实在无以言表,多谢了!
    另外,你能谈谈你对问题2:env->MonitorEnter(),这个方法是干什么用的?完整的用法该怎么写?的看法吗?
    谢谢!
      

  6.   

    MonitorEnter应该是用于线程同步的,你可以参考JNI的文档,以下是我的理解,仅供参考:
    需要同步的代码在执行的时候应该锁定一个对象,在JNI代码中这样使用jint retcode = env->MonitorEnter(env, monObj);
    if(retcode==0) {
       /*需要线程同步的代码在这里
         ......
       */
       
       env->MonitorExit(env, monObj)
    }其中monObj是一个java对象。关于Monitor的信息,你可以参考java语言规范
    http://java.sun.com/docs/books/jls/second_edition/html/memory.doc.html#28270
    或许对你有一些帮助,因为我没有用过这个函数,所以还得你自己摸索。