createJVM {arji} | R Documentation |
create a JVM in a JNI environment
createJVM(optstr, globalize=TRUE, RobjName="..arjiJVM")
optstr |
string encoding JVM options in the form used by the executing platform, i.e., "-Djava.class.path=:." on unix descendants, semicolon-separated on windows. |
globalize |
logical; if TRUE, an assignment to .GlobalEnv will be used to store the JVM reference (JavaVMRef) object, using the value of RobjName. If FALSE, the JavaVMRef object is returned directly. |
RobjName |
string encoding the name to be used for a global JavaVMRef object. |
This function uses JNI C routine JNI_CreateJavaVM and returns an object that includes a pointer to the JVM. Note that the associated JNIEnv can be recovered in C using getEnv method of the JVM, so this is not provided.
returns an instance of class JavaVMRef
Vince Carey <stvjc@channing.harvard.edu>
opts <- paste("-Djava.class.path=", system.file("java", package="arji"), sep=ifelse(.Platform$OS.type == "windows", ";", ":")) createJVM(optstr=opts) cc <- getJavaClass("demo") mm <- getJavaStaticMethodID("main", "([Ljava/lang/String;)V", cc) #callJavaStaticMethod(mm, cc, as.character("A")) callJNIArgable(mm, .jtask("CallStaticMethod"), .jtype("void")) m2 <- getJavaStaticMethodID("doit", "()Ljava/lang/String;", cc) #callJavaStaticMethod(m2, cc, as.character("A")) callJNIArgable(m2, .jtask("CallStaticMethod"), .jtype("void")) m3 <- getJavaStaticMethodID("doit2", "([ILjava/lang/String;)Ljava/lang/String;", cc) #callJavaStaticMethod(m3, cc, as.integer(c(213,33)), "newth") callJNIArgable(m3, .jtask("CallStaticMethod"), .jtype("String"), as.integer(c(213,22)), "newth") #callJavaStaticMethod(m3, cc, as.integer(c(213,33)), "newth") m3b <- getJavaStaticMethodID("doit2barr", "([ZLjava/lang/String;)Ljava/lang/String;", cc) callJNIArgable(m3b, .jtask("CallStaticMethod"), .jtype("String"), as.logical(c(1,0)), "newth") cat("the following shows that we can pass numbers and strings from R to java\n") m4 <- getJavaStaticMethodID("doit3", "([DLjava/lang/String;)Ljava/lang/String;", cc) m4out <- callJNIArgable(m4, .jtask("CallStaticMethod"), .jtype("void"), as.double(c(213.45,22.23)), "newth") m5 <- getJavaNonstaticMethodID("<init>", "()V", cc) demo <- .arjiNew("demo") str <- .arjiNew("java/lang/String", "abc") .arjiCallStaticMethod( demo, "doit", "()Ljava/lang/String;") m4outb <- .arjiCallStaticMethod( demo, "doit3", "([DLjava/lang/String;)Ljava/lang/String;", as.double(c(213.45,33.23)), "newthd") fid <- getJavaStaticFieldID( "demoSField", "I", cc ) fid2 <- getJavaStaticFieldID( "demoSFieldD", "D", cc ) #fid3 <- getJavaStaticFieldID( "demoSFieldC", "C", cc ) getJavaStaticField(fid, cc) getJavaStaticField(fid2, cc) #getJavaStaticField(fid3, cc) # # demonstrate object passage # cat("following shows passage of java object reference from R to java\n") d2 <- .arjiNew("demo2") md2 <- getJavaStaticMethodID("bing", "(Ldemo;)V", d2@classObj) callJNIArgable(md2, .jtask("CallStaticMethod"), .jtype("void"), demo@objref) cat("following show conversions of scalar reference types from java to R\n") nv <- getJavaStaticMethodID("intback", "()I", cc) nvo <- callJNIArgable( nv, .jtask("CallMethod"), .jtype("int") ) #convertJavaObj( nvo@outObjRef, .jtype("int") ) dv <- getJavaStaticMethodID("doubleback", "()D", cc) dvo <- callJNIArgable( dv, .jtask("CallMethod"), .jtype("double") ) bv <- getJavaStaticMethodID("boolback", "()Z", cc) bvo <- callJNIArgable( bv, .jtask("CallMethod"), .jtype("boolean") ) # # now we want to return a string from java to R sv <- getJavaStaticMethodID("stringback", "()Ljava/lang/String;", cc) svo <- callJNIArgable( sv, .jtask("CallStaticMethod"), .jtype("String") ) dcl <- .arjiCallNonstaticMethod(demo, "getClass", "()Ljava/lang/Class;") cstr <- .arjiCallNonstaticMethod(dcl@outObjRef, "toString", "()Ljava/lang/String;") ass <- .arjiNew("arjiSupport") gcm <- getJavaStaticMethodID("tellClassName", "(Ljava/lang/Object;)Ljava/lang/String;", ass@classObj) callJNIArgable(gcm, .jtask("CallStaticMethod"), .jtype("String"), ass@objref) callJNIArgable(gcm, .jtask("CallStaticMethod"), .jtype("String"), demo@objref)