首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c++上使用GetMethodID两次

在c++上使用GetMethodID两次
EN

Stack Overflow用户
提问于 2014-01-10 02:47:37
回答 1查看 331关注 0票数 1

我正在尝试使用JNI从c++调用java中的两个不同方法。

我的c++代码是:

代码语言:javascript
复制
int main()

{  
    JavaVM *jvm;
    JNIEnv *env;
    JavaVMInitArgs vm_args;

    JavaVMOption options;

    options.optionString="-Djava.class.path=try5.jar";

    vm_args.version=JNI_VERSION_1_6;
    vm_args.nOptions=1;
    vm_args.options=&options;
    vm_args.ignoreUnrecognized=0;
    int ret=JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args);

    jclass cls1=env->FindClass("hilla1");
    jclass cls=reinterpret_cast<jclass>(env->NewGlobalRef(cls1));
    jmethodID constract=env->GetMethodID(cls1,"<init>","()V");
    jobject localobj=env->NewObject(cls,constract);
    jobject instance=env->NewGlobalRef(localobj);

    jclass input = env->FindClass("java/lang/Integer");
    char* str="hilla";

    jstring string1=env->NewStringUTF(str);

    int input2[2]={5,4};
    jintArray args=(jintArray)env->NewIntArray(2);
    int *input1=input2;
    env->SetIntArrayRegion(args,0,2,(jint*)input1);

 jmethodID meth = env->GetStaticMethodID(cls, "main1", "([ILjava/lang/String;)V"); 
 env->CallStaticVoidMethod(cls,meth,args,string1);

 jmethodID meth1= env->GetStaticMethodID(cls,"main2","(I;)[I");


    return 1;}

当我调用main1时,它是有效的,但当我调用main2时,它是给我meth1=0 (GetMethodsID失败)

main2是:

代码语言:javascript
复制
public static int[] main2(int b)
EN

回答 1

Stack Overflow用户

发布于 2014-01-10 03:12:35

你想要的不是“"(I)[I "(I;)[I”。(分号只在L之后使用。)

我相信有一个工具(javap)可以为您生成这些签名;否则它们可能会非常烦人。

代码语言:javascript
复制
C:\Program Files\Java\jdk1.7.0_45>javap -s -classpath myJar.jar com.package.MyClass
    Compiled from "MyClass.java"
   public class com.package.MyClass extends java.lang.Object{
       public com.package.MyClass();
         Signature: ()V
       public void setStuff(com.package.Stuff);
          Signature: (Lcom/package/Stuff;)V
    }

javap非常有用,但要专注于一种方法,请尝试:

代码语言:javascript
复制
javap -s -public java.lang.String | egrep -A 2 "getBytes"

(如果你需要在Windows上安装egrep,你可以安装GOW。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21028619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档