views:

536

answers:

2

Hi I use matlab in my project and I want to retrieve the result of matlab in java. Just I want the result. I want to retrive result of file that I make it in matlab in the java. I use this code but it give me the result in matlab windo and I want only to retrive the result in java only. this is the code

public class matlab {
    private static File myMATLABScript;
    //private static File myMATLABScript;
    public static String runScript(File scriptName) {
        String output = ""  ;
        String error = "";
        try {
            //String commandToRun = "matlab -r myMATLABScript -nodisplay < " + scriptName;
            String commandToRun = "matlab  -nosplash -r myMATLABScript -nodisplay -nodesktop < " + scriptName;

            System.out.println(commandToRun);
            Process p = Runtime.getRuntime().exec(commandToRun);
            String s;
            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("\nHere is the standard output of the command:\n");
            while ((s = stdInput.readLine()) != null) {
                output = s + "\n";
                System.out.println(s);
                //System.out.println("what is the problem");
            }
            // read any errors from the attempted command
            //System.out.println("\nHere is the standard error of the command (if any):\n);
            while ((s = stdError.readLine()) != null) {
                error = s + "\n";
                System.out.println(s);
            }
        } catch (Exception e) {
            System.out.println("exception happened - here’s what I know: ");
            e.printStackTrace();
            System.exit(-1);
        }
        return output + error;
    }

    public static void main(String[] args) throws IOException{
        matlab m = new matlab();
        matlab.runScript(myMATLABScript);
    }
}

could you please help me?

+1  A: 
Mr Fooz
+1  A: 

What OS are you running on? The Matlab app behaves differently on different OSes. I assume you are on Windows because you mention the "Matlab Window" even though you're passing "-nodesktop". On Windows, Matlab is inherently a GUI app and stdin/stdout are useless.

Try changing your script to write its output to a file, determined by an environment variable, function argument you pass to mymatlabscript, or well-known path. Then read in that file instead of Matlab's stdout. Use only the "-r" switch, not "<". This will be portable across OSes and you may find it easier to parse because the output file won't have extra Matlab command window output.

You may also need to use the "-wait" switch to block until your Matlab script has completed. Normal Matlab.exe invocation on Windows will return immediately. Make sure your script ends with "exit()" or Matlab will run indefinitely, waiting for user input after your script finishes.

Andrew Janke