[kaffe] kaffe 1.0.6, Thread, run method & JNI

Clemens Fuchslocher clfuit00@fht-esslingen.de
Mon, 13 May 2002 22:08:09 +0200 (CEST)


hi,

Is there a way to use a native JNI method as the run method of a
Thread object?

The following example works with the Sun JDK but it won't work with
kaffe. If I use kaffe in the example below, the start method of the
Thread object will never return.


Test.java:
-=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-=
class Test extends Thread
{
    public native void run ();

    static
    {
        try
        {
            System.loadLibrary ("test");
        }
        catch (Exception e)
        {
            System.err.println ("System.loadLibrary (): " + e);
            System.exit (1);
        }
    }
}

class Main
{
    public static void main (String args[])
    {
        Test test = new Test ();

        test.start ();
	System.out.println ("## ok");

        try
        {
            while (true)
            {
                System.out.println ("main");
                Thread.sleep (1000);
            }
        }
        catch (Exception e)
        {
            System.err.println (e);
            System.exit (1);
        }
    }
}
-=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-=



test_jni.c:
-=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-=
#include <stdio.h>
#include <errno.h>
#include <unistd.h>

#include <jni.h>

#include "Test.h"

JNIEXPORT void JNICALL Java_Test_run (JNIEnv *env, jobject object)
{
    for (;;)
    {
        printf ("run\n");
        sleep (2);
    }
}
-=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-=



This is how I build the example with kaffe:
-=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-=
zero:~$ export PATH=~/kaffe-cvs/bin:$PATH
zero:~$ export CLASSPATH=.:~/kaffe-cvs/lib/Klasses.jar
zero:~$ javac Test.java
zero:~$ kaffeh -jni Test
zero:~$ gcc -Wall -I$HOME/kaffe-cvs/include/ \
 -I$HOME/kaffe-cvs/include/kaffe/ \
 -c test_jni.c
zero:~$ gcc -shared -Wl,-soname,libtest.so -o libtest.so test_jni.o
-=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-=



kaffe produces the following output:
-=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-=
zero:~$ export LD_LIBRARY_PATH=.
zero:~$ kaffe Main
run
run
run
run
run
run
^C
zero:~$
-=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-=



Sun JDK 1.3.1/1.4.0:
-=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-=
zero:~$ export LD_LIBRARY_PATH=.
zero:~$ java Main
## ok
run
main
main
run
main
main
run
main
main
run
^C
zero:~$
-=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-= -=-=

--