Hi all,
 
How to read variable arraySize=100 and newArray = 2 and print it (printf()) inside JVM.
That is I created a JVM (JNI_CreateJavaVM), I only able to get the variable arraySize=0
by using field ID. Is it possible to get the arraySize=100 and newArray = 2 and print it out
in C native program? Thank you
 
soonho
 
***********************************************************************
//ArrrayHandler.java
 
public class ArrayHandler {
  int arraySiz=0;
 
    public static void main(String[] args) {
 int arraySize = 100;
 System.out.println("value of arraySize is "+ arraySize);
 setArray(2);
    }
 
    public static void setArray(int x)
    { int newArray = x;
      System.out.println("value of newArray is "+ newArray);
   }
}
 
***********************************************************************
//arrayofc.c - only able to read arraySize = 0
 
#include <jni.h>
 
main(/*int argc, char *argv[], char **envp*/) {
 
  char string1[10];
  JavaVMOption options[2];
  JavaVMInitArgs vm_args;
  JavaVM *jvm;
  JNIEnv *env;
  long result;
  jmethodID mid;
  jfieldID fid;
  jobject jobj;
  jclass cls;
  int i, asize;
  jstring jstr;
  jobjectArray args;
 
  options[0].optionString = "-Djava.class.path=.";
  options[1].optionString = "-Djava.compiler=NONE";
  //  options[2].optionString = "-verbose:jni";
 
  vm_args.version = JNI_VERSION_1_2;
  vm_args.options = options;
  vm_args.nOptions = 2;
  vm_args.ignoreUnrecognized = JNI_FALSE;
 
  result = JNI_CreateJavaVM(&jvm,(void **)&env, &vm_args);
  printf("JVM created\n");
  if(result == JNI_ERR ) {
    printf("Error invoking the JVM");
    exit (-1);
  }
 
  cls = (*env)->FindClass(env, "ArrayHandler");
    if (cls == 0) {
        printf("Can't find ArrayHandler class\n");
        exit(-1);
    }
 
  (*env)->ExceptionClear(env);
  mid=(*env)->GetMethodID(env, cls, "<init>", "()V");
  jobj=(*env)->NewObject(env, cls, mid);
  fid=(*env)->GetFieldID(env, cls, "arraySize", "I");
  asize=(*env)->GetIntField(env, jobj, fid);
 
  printf("size of array is %d\n",asize);
 

    mid = (*env)->GetStaticMethodID(env, cls, "main", "([Ljava/lang/String;)V");
    if (mid == 0) {
        fprintf(stderr, "Can't find ArrayHandler.main\n");
        exit(1);
    }
 
    (*env)->CallStaticVoidMethod(env, cls, mid);
 
  (*jvm)->DestroyJavaVM(jvm);
}

Reply via email to