JNI GetObjectField () devuelve NULL para uno de los dos DirectByteBuffers

Ok, este está aturdiendo mi pequeña mente.

Recibo un retorno nulo de una de las dos llamadas a GetObjectField (). Cada objeto es un DirectByteBuffer. La llamada no arroja una excepción por no encontrar el campo, pero de todos modos devuelve NULL.

Aquí está la parte peculiar: si cambio el orden de la definición de los campos en la clase interna, veo el cambio nulo de origen a destino.

Aquí hay una paráfrasis del código para reducir el problema a la esencia.

public class Outer {
  private native int submitInner(Inner submission);

  private static class Inner {
    private int status;
    private ByteBuffer source;
    private ByteBuffer dest;
    private Outer outer;


    Inner(Outer outer, ByteBuffer source, ByteBuffer dest) {
      this.outer = outer;
      this.source = source;
      this.dest = dest;
      status = 0;
    }
}

Código nativo. Estoy recortando la identificación del campo aquí por brevedad. Baste decir que el problema se mueve de un campo a otro sin tocarlos, por lo que presumiblemente los ID de campo están bien.

JNIEXPORT jint JNICALL Java_Outer_submitInner
(JNIEnv *env, jobject thisj, jobject inner ) {
  jobject source = (*env)->GetObjectField(env, thisj, Inner_source);
  jobject dest = (*env)->GetObjectField(env, thisj, Inner_dest);
  jobject outer = (*env)->GetObjectField(env, thisj, Inner_outer);
  printf("%016llx %016llx %016llx\n", (long long)source, (long long)dest, (long long)outer);
...

¿Alguien tiene alguna idea para darle sentido a esto?

¿Alguna sugerencia para depurarlo? Estoy caminando a través de Java desde el eclipse. ¿Hay alguna manera de recorrer el lenguaje C o ensamblador para ver qué está pasando realmente?

Gracias Tim.

Respuesta 1

Tengo tres elementos A, B y C. Quería crear un XSD para el cual el esquema debería ser la elección de [A] o [B y C] o [A y B y C] ¿Alguien puede ayudarme a crear un xsd ...

¿Cómo accedería a una imagen en una carpeta diferente en Java? Tengo una serie de imágenes y cambian según la entrada del usuario, que es para lo que sirve x. picture.setIcon (nuevo ImageIcon ("\\ resources \\ icons \\ ...

Mi programa funciona pero no de la manera que quiero. Esta es la salida que quiero: C: \ Documents and Settings \ Joe King \ My Documents \ 418.85A Java \ Projects \ Day 6> java Project3 nina pinta "santa maria" ...

Tengo 2 servidores, uno con una aplicación Java que usa Spring para el manejo de la conexión DB, y el otro con MySQL. El retraso de ping entre ambos servidores es de aproximadamente 100 ms. El servidor Java está utilizando inserciones masivas para DB, ...