JNI: cannot access member of superclass via subclass

Kees Huizing keesh at win.tue.nl
Tue May 25 05:32:54 PDT 1999


I want to access a member field of a Java object from within C code, using JNI.
When this member field is declared in a superclass of the object, I get an 
error. With the JDK, it works as expected. (It also goes wrong with a 
non-private field.)

When I run the following code, I get

% kaffe bar
x is now 0
java.lang.NullPointerException
        at bar.main(7)

I use Kaffe 1.00 on Linux RedHat 5.2

When I do this on Solaris 2.5.1 with JDK 1.2, I get

% java bar
x is now 6

I can circumvent this problem by using in bar.c

klass = (env*)->FindClass(env, "foo");

but this is awkward.

Is this a known bug?

Kees Huizing
------------------
Code:

-- foo.java --
public class foo
{
   private int x = 6;
}

-- bar.java --
public class bar extends foo
{
   public native void print_x();

   public static void main( String[] args )
   {
      new bar().print_x();
   }

   static {
      System.loadLibrary( "bar" );
   }
}

-- bar.c --
#include "bar.h"
#include <stdio.h>

JNIEXPORT void JNICALL Java_bar_print_1x(JNIEnv *env, jobject obj)
{
        jint x;
        jclass klass = (*env)->GetObjectClass(env, obj);
        jfieldID fid_x = (*env)->GetFieldID(env, klass, "x", "I");
        x = (*env)->GetIntField(env, obj, fid_x);

        printf("x is now %d\n", x);
}


-- 
Kees Huizing - keesh at win.tue.nl - Dept. of Mathematics and Computer Science 
Eindhoven University of Technology - The Netherlands * FREE SPEECH ON-LINE
tel:+31-40-2474120 -  fax:+31-40-2468505 - http://www.win.tue.nl/~keesh




More information about the kaffe mailing list