是不是要用RTTI来运行时编译类?有谁知道吗?快来帮帮我吧,自己up一下

解决方案 »

  1.   

    我不是太明白你的做法.如果JAVA程序照你的改法,则在C中不可以用GetStaticMethodID方法来查找.因为你JAVA程序里面的方法已经不是静态的了.所以你虽然找到了该方法,却因无实例而无法使用.
    用GetMethodID去找动态的方法
    用AllocObject方法建类对象
    用CallIntMethod方法来使用你的JAVA 方法.切记:第一个参数不是类句柄,而是实例句柄.
      

  2.   

    谢谢realajax的答复,我把例子写错了,test方法应该是static的,sorry。我以前是直接用CallIntMethod方法调用的,发现不管怎么样返回都是零,而且c里也没有报错,后来改成了CallStaticIntMethod,同时java中的test方法前面也加上了static,才可以得到返回值。我也不明白为什么会这样?
      

  3.   

    JAVA中严格区别静态及动态的方法,动态方法必须有实例产生才可以使用.静态方法则不用.由于JNI实际上是SUN公司为JAVA作的扩充功能的接口,所以会遵循JAVA标准.但JNI并不是非常完善的,所以出现取得句柄是没有问题,但实际运行时却因找不到类实体而出现运行方法句柄为空的情况.所以返回空值.
      

  4.   

    在java中静态或动态的方法是被严格区分的.动态的方法是必须存在类对象后才可以使用.静态的则不必存在类对象.JNI是JAVA的扩展接口,严格遵从此规矩.所以静态方法和动态方法必须采用不同的方法取得其句柄.我遇到过类似的情况.用静态的方法去取得动态方法的句柄,不出错,且运行时也不报错,只是没有正确结果.其实方法的句柄根本不是想要的,因此没有运行起来.应该是JNI的BUG,可能用过的人少,没有人去注意这一情况吧.
      

  5.   

    请问在pthread 内?调jni的方法,就core dump呢,而在进程中都ok