FindClass 找不到类
c++调用java
编译环境linuxUbuntu13.10
JDK信息
root@master:/usr/java#echo$JAVA_HOME
/usr/java/jdk1.7.0_65
root@master:/usr/java#echo$CLASSPATH
.:/usr/java/jdk1.7.0_65/lib:/usr/java/jdk1.7.0_65/jre/lib:
root@master:/#echo$JAR_HOME
/usr/java/jdk1.7.0_65/jre
root@master:/#echo$PATH
/usr/java/jdk1.7.0_65/bin:/usr/java/jdk1.7.0_65/jre/bin
[code=c]
在home目录下建议个com目录,然后再在com目录下建一个test目录
[code=c]
root@master:/home/com/test#pwd
/home/com/test
编写一个java程序
root@master:/home/com/test#catMyAdd.java
packagecom.test;
publicclassMyAdd.j{
publicstaticintadd(inta,intb)
{
returna+b;
}
}
root@master:/home/com/test#javacMyAdd.java
root@master:/home/com/test#ls
MyAdd.classMyAdd.java
这里需要用javah生成MyAdd.h文件吗?
然后写一个test.cpp文件
#include
#include
intmain()
{
JavaVM*jvm=(JavaVM*)0;
JNIEnv*env=(JNIEnv*)0;
JavaVMInitArgsvm_args;
longstatus;
jclasscls;
jmethodIDmid;
jintsquare;
jbooleanjnot;
jobjectjobj;
vm_args.version=JNI_VERSION_1_6;
vm_args.options=(JavaVMOption*)0;
vm_args.ignoreUnrecognized=JNI_FALSE;
status=JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args);
if(status!=JNI_ERR)
{
cls=env->FindClass("com/test/MyAdd");
if(cls!=0)
{
printf("findjavaclasssuccess\n");
mid=env->GetMethodID(cls,"","(V)");
if(mid!=0)
{
jobj=env->NewObject(cls,mid);
printf("initok!\n");
}
//调用add函数
mid=env->GetStaticMethodID(cls,"add","(II)I");
if(mid!=0)
{
square=env->CallStaticIntMethod(cls,mid,5,5);
printf("square:%d\n",square);
}
}
else
{
fprintf(stderr,"FindClassfailed!\n");
}
jvm->DestroyJavaVM();
fprintf(stdout,"JavaVMdestry!\n");
return0;
}
else
{
printf("createjavajvmfail\n");
return-1;
}
}
编译
root@master:/home/com/test#catmake.sh
g++-otest\
-I/usr/java/jdk1.7.0_65/include\
-I/usr/java/jdk1.7.0_65/include/linux\
-L/usr/bin/java\
-L/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/servetest.cpp-ljvm
root@master:/home/com/test#ls
MyAdd.classMyAdd.javamake.shtesttest.cpp
root@master:/home/com/test#./test
FindClassfailed!
JavaVMdestry!