Purva Kulkarni
2016-May-02 11:48 UTC
[R] Rserve() error in the first instance of running a Java application
Hi, I am writing a Java GUI application which uses Rserve(). I have a java script which sends a command to the shell to start Rserve(). When I run the Java main method for the very first time, it calls this script to invoke Rserve() and starts Rserve(). But, in this first run the Java GUI application is not launched. But, when I run the main method for the second time, I get the following message and the GUI application is launched. ##> SOCK_ERROR: bind error #48(address already in use) I do not understand this behaviour. From what I can understand, in the first run, the script just establishes the Rserve() connection and then in the second run it works. Can someone help me fix this, so that program connects to Rserve() in the first instance and also launches the GUI? Here my Java class containing the method to invoke Rserve(): public class InvokeRserve { public static int invoke() { String s; try { // run the Unix "ps -ef" command // using the Runtime exec method: Process p = Runtime.getRuntime().exec("R CMD RServe --vanilla"); BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); // read the output from the command System.out.println("Here is the standard output of the command:\n"); while ((s = stdInput.readLine()) != null) { System.out.println(s); } // read any errors from the attempted command System.out.println("Here is the standard error of the command (if any):\n"); while ((s = stdError.readLine()) != null) { System.out.println(s); } // System.exit(0); } catch (IOException e) { System.out.println("exception happened - here's what I know: "); e.printStackTrace(); System.exit(-1); } return 1; } Here is the main method which calls the invoke() method: public class Application { /** * Main method for the Swing application * * @param args * @throws Exception */ public static void main(String[] args) throws Exception { // Start Rserve() int value = InvokeRserve.invoke(); if(value == 1) { // Run the GUI construction in the Event-Dispatching thread for thread-safety SwingUtilities.invokeLater(new Runnable() { /** * run method which create a new GUIMain object */ @Override public void run() { new GUIMain(?Data Analysis Application?); // Let the constructor do the job } }); } } }