diff --git a/java_src/me/ehlxr/HelloWorld.java b/java_src/me/ehlxr/HelloWorld.java index c2f91f6..9c888c9 100644 --- a/java_src/me/ehlxr/HelloWorld.java +++ b/java_src/me/ehlxr/HelloWorld.java @@ -1,25 +1,35 @@ package me.ehlxr; class HelloWorld { - private static native String hello(String input); - private static native byte[] helloByte(byte[] input); - private static native void factAndCallMeBack(int n, HelloWorld callback); - private static native long counterNew(HelloWorld callback); - private static native void counterIncrement(long counter_ptr); - private static native void counterDestroy(long counter_ptr); - private static native void asyncComputation(HelloWorld callback); - - private static native String fetchNameStr(HelloWorld param); - static { // Linux: export LD_LIBRARY_PATH=/Users/ehlxr/Desktop/jni_rs/mylib/target/debug // Mac: export JAVA_LIBRARY_PATH=/Users/ehlxr/Desktop/jni_rs/mylib/target/debug System.loadLibrary("mylib"); } + public long no; + private String name; + public int age; + + private static native String hello(String input); + + private static native byte[] helloByte(byte[] input); + + private static native void factAndCallMeBack(int n, HelloWorld callback); + + private static native long counterNew(HelloWorld callback); + + private static native void counterIncrement(long counter_ptr); + + private static native void counterDestroy(long counter_ptr); + + private static native void asyncComputation(HelloWorld callback); + + private static native String getFiled(HelloWorld param); + public static void main(String[] args) { - // String output = HelloWorld.hello("Java"); - // System.out.println(output); + String output = HelloWorld.hello("Java"); + System.out.println(output); // byte[] outputByte = HelloWorld.helloByte("byte".getBytes()); // System.out.println(outputByte); @@ -29,7 +39,7 @@ class HelloWorld { // long counter_ptr = counterNew(new HelloWorld()); // for (int i = 0; i < 5; i++) { - // counterIncrement(counter_ptr); + // counterIncrement(counter_ptr); // } // counterDestroy(counter_ptr); @@ -37,28 +47,27 @@ class HelloWorld { // System.out.println("Invoking asyncComputation (thread id = " + Thread.currentThread().getId() + ")"); // asyncComputation(new HelloWorld()); - - HelloWorld hw = new HelloWorld(); - hw.setNameStr("fsdfs"); - System.out.println(HelloWorld.fetchNameStr(hw)); + HelloWorld hw = new HelloWorld(); + hw.setName("Jack"); + hw.no = 123434555L; + hw.age = 30; + System.out.println(HelloWorld.getFiled(hw)); } - private String nameStr; - - public void setNameStr(String nameStr){ - this.nameStr=nameStr; + public String getName() { + return name; } - public String getNameStr(){ - return nameStr; + public void setName(String name) { + this.name = name; } public void factCallback(int res) { - System.out.println("factCallback: res = " + res); + System.out.println("factCallback: res = " + res); } public void counterCallback(int count) { - System.out.println("counterCallback: count = " + count); + System.out.println("counterCallback: count = " + count); } public void asyncCallback(int progress) { diff --git a/mylib/src/lib.rs b/mylib/src/lib.rs index 14c1b9c..063f45d 100644 --- a/mylib/src/lib.rs +++ b/mylib/src/lib.rs @@ -4,13 +4,32 @@ use jni::JNIEnv; use std::{sync::mpsc, thread, time::Duration}; #[no_mangle] -pub extern "system" fn Java_me_ehlxr_HelloWorld_fetchNameStr( +pub extern "system" fn Java_me_ehlxr_HelloWorld_getFiled( env: JNIEnv, _class: JClass, input: JObject, ) -> jstring { + let age = env.get_field(input, "age", "I").unwrap().i().unwrap(); + println!("get age field: {}", age); + + let name: JString = env + .get_field(input, "name", "Ljava/lang/String;") + .unwrap() + .l() + .unwrap() + .into(); + println!( + "get name field: {}", + String::from(env.get_string(name).unwrap()) + ); + + let no = env.get_field(input, "no", "J").unwrap().j().unwrap(); + // let jstr = env.get_string(JString::from(no)).unwrap(); + // println!("get addr field: {}", String::from(jstr)); + println!("get no field: {}", no); + let out_str = if let JValue::Object(result) = env - .call_method(input, "getNameStr", "()Ljava/lang/String;", &[]) + .call_method(input, "getName", "()Ljava/lang/String;", &[]) .unwrap() { let jstr = env.get_string(JString::from(result)).unwrap();