Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux编程 > » 正文

Step By Step(Java 本地方法篇)(9)

来源: 未知 分享至:
* (1 + tax / 100);
7 PrintWriter out = new PrintWriter(System.out);
8 Printf.fprint(out,\"Amount due = %8.2fn\", amountDue);
9 out.flush();
10 }
11 }

    9.    调用Java静态方法:
    这里我们可以直接修改上例中的C语言本地方法,在其中加入一些code,执行静态方法System.getProperty(\"java.class.path\"),并将结果打印到控制台。

 1     #include \"Printf.h\"
2 #include <stdlib.h>
3 #include <string.h>
4 #include <float.h>
5
6 JNIEXPORT void JNICALL Java_Printf_fprint
7 (JNIEnv* env, jclass cl, jobject out, jstring format, jdouble x)
8 {
9 const char* cformat = env->GetStringUTFChars(format,NULL);
10 char* cstr = (char*)calloc(strlen(cformat) + 20,sizeof(char));
11 sprintf(cstr,cformat,x);
12 jstring str = env->NewStringUTF(cstr);
13 free(cstr);
14 env->ReleaseStringUTFChars(format,cformat);
15
16 jclass class_PrintWriter = env->GetObjectClass(out);
17 //对应于void PrintWrite.print(String)方法
18 jmethodID id_print = env->GetMethodID(class_PrintWriter,\"print\",\"(Ljava/lang/String;)V\");
19 //这里Void是CallXxxMethod一组方法中的一个,表示调用函数的返回值类型。
20 //因此该方法的返回值也是void,如果调用CallIntMethod,其返回值将为jint。
21 env->CallVoidMethod(out,id_print,str);
22
23 //访问静态方法System.getProperty的代码如下:
24 //1. 由于没有System的实例存在,因此需要使用FindClass方法,而不是上面使用的
25 //GetObjectClass()
26 jclass class_System = env->FindClass(\"java/lang/System\");
27 //2. String System.getProperty(String) 为该静态方法的Java原型
28 //由于是静态方法,因此JNI方法名有别于上面的GetMethodID。
29 jmethodID id_getProperty = env->GetStaticMethodID(class_System,\"getProperty\",
30 \"(Ljava/lang/String;)Ljava/lang/String;\");
31 //3. 注意CallStaticObjectMethod中Static同样表示调用的是static方法,Object表示
32

Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史