update at 2022-02-25 09:57:08 by ehlxr
This commit is contained in:
		| @@ -1,4 +1,7 @@ | |||||||
| package me.ehlxr; | package me.ehlxr; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.Map; | ||||||
|  |  | ||||||
| class HelloWorld { | class HelloWorld { | ||||||
|     static { |     static { | ||||||
| @@ -7,9 +10,11 @@ class HelloWorld { | |||||||
|         System.loadLibrary("mylib"); |         System.loadLibrary("mylib"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public long no; |     public Long no; | ||||||
|     private String name; |     private String name; | ||||||
|     public int age; |     public int age; | ||||||
|  |     public List<String> ls; | ||||||
|  |     public Map<String, Long> map; | ||||||
|  |  | ||||||
|     private static native String hello(String input); |     private static native String hello(String input); | ||||||
|  |  | ||||||
| @@ -47,10 +52,15 @@ class HelloWorld { | |||||||
|         // System.out.println("Invoking asyncComputation (thread id = " + Thread.currentThread().getId() + ")"); |         // System.out.println("Invoking asyncComputation (thread id = " + Thread.currentThread().getId() + ")"); | ||||||
|         // asyncComputation(new HelloWorld()); |         // asyncComputation(new HelloWorld()); | ||||||
|  |  | ||||||
|  |         List<String> ls = new ArrayList<>(); | ||||||
|  |         ls.add("ls1"); | ||||||
|  |         ls.add("ls2"); | ||||||
|  |         ls.add("ls3"); | ||||||
|         HelloWorld hw = new HelloWorld(); |         HelloWorld hw = new HelloWorld(); | ||||||
|         hw.setName("Jack"); |         hw.setName("Jack"); | ||||||
|         hw.no = 123434555L; |         hw.no = 123434555L; | ||||||
|         hw.age = 30; |         hw.age = 30; | ||||||
|  |         hw.ls = ls; | ||||||
|         System.out.println(HelloWorld.getFiled(hw)); |         System.out.println(HelloWorld.getFiled(hw)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| use jni::objects::{GlobalRef, JClass, JObject, JString, JValue}; | use jni::objects::{GlobalRef, JClass, JList, JObject, JString, JValue}; | ||||||
| use jni::sys::{jbyteArray, jint, jlong, jstring}; | use jni::sys::{jbyteArray, jint, jlong, jstring}; | ||||||
| use jni::JNIEnv; | use jni::JNIEnv; | ||||||
| use std::{sync::mpsc, thread, time::Duration}; | use std::{sync::mpsc, thread, time::Duration}; | ||||||
| @@ -9,6 +9,23 @@ pub extern "system" fn Java_me_ehlxr_HelloWorld_getFiled( | |||||||
|     _class: JClass, |     _class: JClass, | ||||||
|     input: JObject, |     input: JObject, | ||||||
| ) -> jstring { | ) -> jstring { | ||||||
|  |     let jlist = env | ||||||
|  |         .get_list( | ||||||
|  |             env.get_field(input, "ls", "Ljava/util/List;") | ||||||
|  |                 .unwrap() | ||||||
|  |                 .l() | ||||||
|  |                 .unwrap(), | ||||||
|  |         ) | ||||||
|  |         .unwrap(); | ||||||
|  |     let jlist_iter = jlist.iter().unwrap(); | ||||||
|  |     jlist_iter.into_iter().for_each(|jobj| { | ||||||
|  |         let jstr: JString = jobj.into(); | ||||||
|  |         println!( | ||||||
|  |             "get list filed: {}", | ||||||
|  |             String::from(env.get_string(jstr).unwrap()) | ||||||
|  |         ); | ||||||
|  |     }); | ||||||
|  |  | ||||||
|     let age = env.get_field(input, "age", "I").unwrap().i().unwrap(); |     let age = env.get_field(input, "age", "I").unwrap().i().unwrap(); | ||||||
|     println!("get age field: {}", age); |     println!("get age field: {}", age); | ||||||
|  |  | ||||||
| @@ -23,9 +40,22 @@ pub extern "system" fn Java_me_ehlxr_HelloWorld_getFiled( | |||||||
|         String::from(env.get_string(name).unwrap()) |         String::from(env.get_string(name).unwrap()) | ||||||
|     ); |     ); | ||||||
|  |  | ||||||
|     let no = env.get_field(input, "no", "J").unwrap().j().unwrap(); |     // let no = env.get_field(input, "no", "J").unwrap().j().unwrap(); | ||||||
|     // let jstr = env.get_string(JString::from(no)).unwrap(); |     // println!("get no field: {}", no); | ||||||
|     // println!("get addr field: {}", String::from(jstr)); |  | ||||||
|  |     let no = env | ||||||
|  |         .call_method( | ||||||
|  |             env.get_field(input, "no", "Ljava/lang/Long;") | ||||||
|  |                 .unwrap() | ||||||
|  |                 .l() | ||||||
|  |                 .unwrap(), | ||||||
|  |             "longValue", | ||||||
|  |             "()J", | ||||||
|  |             &[], | ||||||
|  |         ) | ||||||
|  |         .unwrap() | ||||||
|  |         .j() | ||||||
|  |         .unwrap(); | ||||||
|     println!("get no field: {}", no); |     println!("get no field: {}", no); | ||||||
|  |  | ||||||
|     let out_str = if let JValue::Object(result) = env |     let out_str = if let JValue::Object(result) = env | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user