Listing 3
(a)HelloWorld.java package noodleglue.examples.helloWorld; import noodle.noodleGlue.*; /** Generated from non-class methods */ public class HelloWorld extends Bridgable { // Call to Library loader on <cinit> static { noodle.noodleGlue.library.HelloWorldJNILibrary.loadNativeLibrary(); } //------------------------------ | ----------------------------------- //------------------------ Native methods ---------------------------- //------------------------------ | ----------------------------------- static private final native java.lang.String staticNative_HelloWorldHelloWorld18hhelloWorldjava1lang1String(); //------------------------------ | ----------------------------------- //----- Java bridging methods (which call native methods) ------------ //------------------------------ | ----------------------------------- //========================= helloWorld ================================ static public java.lang.String helloWorld() { java.lang.String returnValueVal= staticNative_HelloWorldHelloWorld18hhelloWorldjava1lang1String(); String returnValue=returnValueVal; return returnValue; } }(b)
HelloWorldJNILibrary.java package noodle.noodleGlue.library; public class HelloWorldJNILibrary { private static boolean fLoaded = false; /** Called statically on class initialisation for each wrapper class, * this method loads the native library without user intervention. * Synchronized to prevent any native access before library * calls OnJNILoad */ public static final void loadNativeLibrary() { if (!fLoaded) synchronized (HelloWorldJNILibrary.class) { if (noodle.noodleGlue.NativeLibrary.DEBUG_LIBRARIES==true) System.loadLibrary("HelloWorldD"); else System.loadLibrary("HelloWorld"); fLoaded=true; } } }(c)
HelloWorldJNI.cpp #include <NoodleGlue/Bridgable.h> #include <HelloWorld/HelloWorld.h> extern "C" { //========================== helloWorld ===================================== JNIEXPORT jstring JNICALL Java_noodleglue_examples_ helloWorld_HelloWorld_staticNative_ 1HelloWorldHelloWorld18hhelloWorldjava1lang1String (JNIEnv *jpEnv,jclass jClassRef) { const char* returnValue = ((char*) ::helloWorld()); jstring returnValueVal; returnValueVal=NoodleGlue::CJNIEnv::toJavaString(jpEnv,returnValue); return returnValueVal; } }