写了两个java类,如下:
public class MyClassA {

public     String myString1;
private    String myString2;

public MyClassA()
{ }

public MyClassA(String ss)
{
myString1 = ss;
myString2 = ss;
}

public  String getMyString(int whichString)
{
if(whichString == 1)
return myString1;
else 
return myString2;
}

public  void setMyString(int whichString, String ss)
{
if(whichString == 1)
myString1 = ss;
else 
myString2 = ss;
}}public class UseClassA {
public  MyClassA  aclass;

public UseClassA()
{
aclass.setMyString(1, "I love Java");
aclass.setMyString(2, "I do not love Java");
}

public UseClassA(String ss)
{
aclass.setMyString(1, ss);
aclass.setMyString(2, ss);
}

public void setMyString(int whichString, String ss)
{
aclass.setMyString(whichString, ss);
}

public String getMyString(int whichString)
{
return aclass.getMyString(whichString);
}

public String getSubString(String ss)
{
return new String(ss);
}
}现在在C++中调用类UseClassA :
int main()
{

//*****创建java虚拟机和环境****
int creatjavavm_res;
JavaVMInitArgs vm_args;
JavaVMOption options[3];
JavaVM *jvm;
JNIEnv *env; options[0].optionString = "-Djava.compiler=NONE";
options[1].optionString = "-Djava.class.path=.;E:\\eclipse\\workspace\\SimpleJavaTest;";
options[2].optionString = "-verbose:NONE"; vm_args.version = JNI_VERSION_1_4;
vm_args.nOptions = 3;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE;
HINSTANCE hInstance = ::LoadLibrary("D:\\Program Files\\Java\\jdk1.6.0_02\\jre\\bin\\client\\jvm.dll");
if (hInstance == NULL)
{
return false;
} PFunCreateJavaVM funCreateJavaVM = (PFunCreateJavaVM)::GetProcAddress(hInstance, "JNI_CreateJavaVM"); creatjavavm_res = (*funCreateJavaVM)(&jvm, (void**)&env, &vm_args);
if (creatjavavm_res < 0)
{
cout<<"Can not create java environment."<<endl;
return -1;
}
//******创建java虚拟机和环境完毕***** jstring retJString;
string retString; jmethodID methodID;
jclass cls = env->FindClass("UseClassA");
jobject myUClassA = env->AllocObject(cls); methodID = env->GetMethodID(cls,"setMyString","(ILjava/lang/String;)V");
retString = "Modified String";
retJString = NewJString(env,retString.c_str());
env->CallVoidMethod(myUClassA,methodID,1,retJString); methodID = env->GetMethodID(cls,"getMyString","(I)Ljava/lang/String;");
retJString = (jstring)(env->CallObjectMethod(myUClassA,methodID,1));
retString  = JStringToCString(env,retJString);
cout<<retString.c_str()<<endl; return 0;
}其中NewJString和JStringToCString分别为将c中的字符串转换为jstring和将jstring转换为c中的字符串的函数,已经经过测试,没有问题。现在的问题是retJString = (jstring)(env->CallObjectMethod(myUClassA,methodID,1))这句返回的retJString总是NULL,请高手帮忙解决一下,感激不尽.....