Hi all, I am using R and JRI under Windows XP Pro. I am posting this question here since the reason might be R related (since I am running an R script) but there is also a very good chance that it is JRI only (since I am using the JRI interface to activate the script) -- in which case I want to apologize for misplacing this message.
I have a method that instantiates an REngine object every time it is called. It runs a script provided by a file name and closes REngine afterward. The script works fine, the png file is successfully generated and the PNG file is released so that I can delete it if I want ( but I don't in that case). For some strange reason, when running this code twice I get the following error: upon which the Java Virtual machine dies on me. Any explanation would be greatly appreciated! Best, Ralf Here the Java code, the R code, and the Java VM error: ++++++++++++++++ START JAVA CODE ++++++++++++++++++ /** Helper method */ private static void eval(Rengine r, String s) { r.eval(s, false); } /** Assigns the given java value to the given R variable name */ private static void assign(Rengine r, String rVariableName, String javaValue) { r.assign(rVariableName, javaValue); } public void run() throws Exception { String filepath = this.path; if (filepath != null) { File rFile = new File(filepath ); if (rFile.exists()) { // run R script // start R engine if (!Rengine.versionCheck()) { System.err.println("** Version mismatch - Java files don't match library version."); System.exit(1); } // creating R engine Rengine rEngine = new Rengine(null, false, new EmptyCallbacks()); // the engine creates R is a new thread, so we should wait until it's ready if (!rEngine.waitForR()) { System.out.println("Cannot load R for " + this.getClass().getName()); return; } // executing logic try { assign(rEngine, "filename", filepath); eval(rEngine, "source(filename)"); } catch (Exception e) { System.out.println(this.getClass().getName() + ": Error in R code: " + e); e.printStackTrace(); // stopping R engine System.out.println("Error when running script - rEngine stopped!"); if (rEngine != null){ rEngine.end(); } } // stopping R engine rEngine.end(); } else { throw new Exception(getClass().getName() + " not run - missing R file - location: " + rFile.getAbsolutePath()); } } } +++++++++++++++++++++ END JAVA CODE +++++++++++++++++++++++++ +++++ START R Code ++++++++ library(RJDBC) # db connection driver <- JDBC("com.mysql.jdbc.Driver","lib/mysql-connector-java-5.0.6-bin.jar") con <- dbConnect(driver, "jdbc:mysql://localhost/mydb", "xxx", "yyy") # list tables dbListTables(con) # user, task and event information result = dbGetQuery(con, "SELECT x,y from mytable;") png(file="output.png") plot(result$x, result$y) dev.off() +++++ START R Code ++++++++ ERROR: # # An unexpected error has been detected by Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=...., pid=5400, tid=3204 # # Java VM: Java HotSpot(TM) Client VM (11.2-b01 mixed mode, ....) # Problematic frame: # C [R.dll+0x1136fe] # # An error report file with more information is saved as: # .... [WARN] 404 - GET /output.png (127.0.0.1) 1402 bytes Request headers Host: localhost:8888 User-Agent: .... Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Referer: http://localhost.... Response headers Content-Length: 1402 Content-Type: text/html; charset=iso-8859-1 # # If you would like to submit a bug report, please visit: # http://java.sun.com/webapps/bugreport/crash.jsp # The crash happened outside the Java Virtual Machine in native code. # See problematic frame for where to report the bug. # ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.