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); 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 static void main(String[] args) { String output = HelloWorld.hello("Java"); System.out.println(output); byte[] outputByte = HelloWorld.helloByte("byte".getBytes()); System.out.println(outputByte); HelloWorld.factAndCallMeBack(6, new HelloWorld()); long counter_ptr = counterNew(new HelloWorld()); for (int i = 0; i < 5; i++) { counterIncrement(counter_ptr); } counterDestroy(counter_ptr); System.out.println("Invoking asyncComputation (thread id = " + Thread.currentThread().getId() + ")"); asyncComputation(new HelloWorld()); } public void factCallback(int res) { System.out.println("factCallback: res = " + res); } public void counterCallback(int count) { System.out.println("counterCallback: count = " + count); } public void asyncCallback(int progress) { System.out.println("asyncCallback: thread id = " + Thread.currentThread().getId() + ", progress = " + progress + "%"); } }