c++中调用java中嵌套对象的类的问题

问题描述

写了两个java类,如下:publicclassMyClassA{publicStringmyString1;privateStringmyString2;publicMyClassA(){}publicMyClassA(Stringss){myString1=ss;myString2=ss;}publicStringgetMyString(intwhichString){if(whichString==1)returnmyString1;elsereturnmyString2;}publicvoidsetMyString(intwhichString,Stringss){if(whichString==1)myString1=ss;elsemyString2=ss;}}publicclassUseClassA{publicMyClassAaclass;publicUseClassA(){aclass.setMyString(1,"IloveJava");aclass.setMyString(2,"IdonotloveJava");}publicUseClassA(Stringss){aclass.setMyString(1,ss);aclass.setMyString(2,ss);}publicvoidsetMyString(intwhichString,Stringss){aclass.setMyString(whichString,ss);}publicStringgetMyString(intwhichString){returnaclass.getMyString(whichString);}publicStringgetSubString(Stringss){returnnewString(ss);}}现在在C++中调用类UseClassA:intmain(){//*****创建java虚拟机和环境****intcreatjavavm_res;JavaVMInitArgsvm_args;JavaVMOptionoptions[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;HINSTANCEhInstance=::LoadLibrary("D:\ProgramFiles\Java\jdk1.6.0_02\jre\bin\client\jvm.dll");if(hInstance==NULL){returnfalse;}PFunCreateJavaVMfunCreateJavaVM=(PFunCreateJavaVM)::GetProcAddress(hInstance,"JNI_CreateJavaVM");creatjavavm_res=(*funCreateJavaVM)(&jvm,(void**)&env,&vm_args);if(creatjavavm_res<0){cout<<"Cannotcreatejavaenvironment."<<endl;return-1;}//******创建java虚拟机和环境完毕*****jstringretJString;stringretString;jmethodIDmethodID;jclasscls=env->FindClass("UseClassA");jobjectmyUClassA=env->AllocObject(cls);methodID=env->GetMethodID(cls,"setMyString","(ILjava/lang/String;)V");retString="ModifiedString";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;return0;}其中NewJString和JStringToCString分别为将c中的字符串转换为jstring和将jstring转换为c中的字符串的函数,已经经过测试,没有问题。现在的问题是retJString=(jstring)(env->CallObjectMethod(myUClassA,methodID,1))这句返回的retJString总是NULL,请高手帮忙解决一下,感激不尽.....

解决方案

解决方案二:
友情帮顶吧
解决方案三:
头像左边这个表示等级的裤衩真是升得太慢了

时间: 2024-10-22 06:30:15

c++中调用java中嵌套对象的类的问题的相关文章

实用技巧:PHP中调用Java类的两种方法

Java语言功能强大,因此在许多情况下在php中来调用Java的功能将十分有用.在php中调用Java语言有两种方法,一种是使用php中的Java扩展模块,另一种是使用minij2ee应用服务器提供的SJOP协议实现.下面我们来比较一下这两种方法各自的特点. 1.php的Java模块 php发布版中包含一个Java扩展模块,可以用来调用Java对象,例如: <?php$system=new Java("java.lang.System");print "Java ver

如何在C/C++中调用Java

java跨平台的特性使Java越来越受开发人员的欢迎,但也往往会听到不少的抱怨:用Java开发的图形用户窗口界面每次在启动的时候都会跳出一个控制台窗口,这个控制台窗口让本来非常棒的界面失色不少.怎么能够让通过Java开发的GUI程序不弹出Java的控制台窗口呢?其实现在很多流行的开发环境例如JBuilder.Eclipse都是使用纯Java开发的集成环境.这些集成环境启动的时候并不会打开一个命令窗口,因为它使用了JNI(Java Native Interface)的技术.通过这种技术,开发人员不

jni-AndroidJNI如何在线程中调用java的非静态方法

问题描述 AndroidJNI如何在线程中调用java的非静态方法 我最近在使用Android里的JNI,我发现只要调用的是GetStaticMethodID,无论是用CallVoidMethod还是CallStaticVoidMethod,都可以正常调用JAVA里的静态方法,这是为什么? 还有,在C 中,非主线程中,我用过AttachCurrentThread,可调用静太的JAVA方法,但无法使用非静态的方法,是我使用错了吗? 解决方案 无论是用CallVoidMethod还是CallStat

在asp/asp.net中调用java写的类

asp.net|asp.net 在开发过程中偶尔会遇到要在ASP/ASP.Net中调用JAVA写的类,以实现之前已经用JAVA实现的功能,下面就以一个简单示例说明详细的使用方法: 1.创建java文件:使用任何你喜欢的编辑器编辑以下内容:public class hello{ public String helloWorld(String s) { if(s == null) return ""; else return s; }}将此文件保存为hello.java 2.编译java文

如何在Oracle存储过程中调用Java方法

存储过程中调用Java程序段 软件环境: 1.操作系统:Windows 2000 Server 2.数 据 库:Oracle 8i R2 (8.1.7) for NT 企业版 3.安装路径:C:\ORACLE 实现方法: 1.创建一个文件为Test.java public class Test { public static void main(String args[]) { System.out.println("HELLO THIS iS A Java PROCEDURE"):

android-Android中在activity中调用service中的某个对象的方法

问题描述 Android中在activity中调用service中的某个对象的方法 Android中在activity中如何调用service中的某个对象的方法!大神求助或者说如何在activity中获取到service中的某个对象! 解决方案 你这个问题问的有些问题啊,activity中获取到service中的某个对象!估计就是调用Service的方法吧,为Service写构造方法,New出Service对象后调用,或者直接写成静态方法直接用类名调用,再或者写接口,怎么调用都可以啊,和工具类调

图片-jsp中调用java方法,方法中文件路径问题

问题描述 jsp中调用java方法,方法中文件路径问题 我在jsp中了写了java代码调用java类的方法,方法中需要在网页下载一张图片保存 OutputStream os = new FileOutputStream(new File("identityCode/checkimage.JPEG")); 我这样写的,然后一直报 :系统找不到文件路径.路径各种都换了 还是不行 解决方案 解决JSP路径问题的方法jsp路径问题解决方法jsp调用js文件中文乱码问题解决方法 解决方案二: 试

sql server-如何在SQL Server 数据库中调用JAVA程序

问题描述 如何在SQL Server 数据库中调用JAVA程序 工作中 遇到一个实际的问题如下: 一个在线的SQL server数据库A,他的一个触发器在数据库有更新时把新的数据插入的到另一个SQL server 数据库B,已经写好的一个JAVA程序可以把B中的数据全部复制到一个Oracle 数据库C中,并且立即把数据库B中的数据清空.现在希望这个程序能够自动执行,就是JAVA程序能够在检测到B中有新数据后立即开始自动执行.我已经知道对于Oracle数据库可以通过触发器直接调用JAVA程序,可是

.bat中调用java程序,且得到java的输出(system.out.println)内容

问题描述 如题:在.bat中调用java程序,且得到java的输出(system.out.println)内容.我要在bat中执行"java-jarxxx.jar"并且用一个变量保存jar运行后的输出结果,jar中要么输出(system.out.println)0要么输出1,并且对结果进行判断如果变量值为0(注:变量的值是由jar运行产生的)则使用exit/B0退出,如果变量值1则使用exit/B1退出linux版的.sh代码如下:var=`java-jarxxxxx.jar${use